Foros del Web » Programando para Internet » PHP »

Php Socket Daemon

Estas en el tema de Php Socket Daemon en el foro de PHP en Foros del Web. LA idea general es captar una trama desde Un GPS via IP en un server Linux, pero me genera un error Código PHP: #!/usr/local/bin/php -q <? ...
  #1 (permalink)  
Antiguo 09/12/2005, 16:53
 
Fecha de Ingreso: abril-2002
Ubicación: Buacaramanga - Colombia
Mensajes: 46
Antigüedad: 15 años, 8 meses
Puntos: 0
Php Socket Daemon

LA idea general es captar una trama desde Un GPS via IP en un server Linux, pero me genera un error

Código PHP:
#!/usr/local/bin/php -q
<?
require("funciones.php");
$archivo_log="/var/log/avllog_udp";
$archivo_error_log="/var/log/avlerror_udp";

$argumentos=$_SERVER["argv"];
for(
$i=1;$i<sizeof($argumentos);$i++){
    if(
$argumentos[$i]=="-p" && isset($argumentos[$i+1]) && is_numeric($argumentos[$i+1])){
        
$port=$argumentos[$i+1];
        
$i++;
    }
}
if(!isset(
$port)) $port 3457;
$tcp_address="127.0.0.1";
$tcp_port="10000";

$flog=fopen($archivo_log,"a+");
fwrite($flog,date("[Y-m-d H:i:s]") . "[Iniciando el demonio udp en el puerto [$port]...]\n");
fclose($flog);

set_time_limit (0);

$address '69.10.138.132';

$num_envios=0;
while(
TRUE) {
    
    if(!isset(
$socketD)){
        
$socketD socket_create(AF_INETSOCK_DGRAMSOL_UDP); // 
        
if (!socket_setopt($socketD,SOL_SOCKET,SO_REUSEADDR,1)) {
             echo 
"socket_setopt() error: ".socket_strerror(socket_last_error($socketD))."\n";
             exit;
        }

        if(
$socketD === FALSE) { 
            echo 
'socket_create error: '.socket_strerror(socket_last_error())."\n";
            exit(
1);
        }

        if(!
socket_bind($socketD$address$port)) {
            
socket_close($socketD);
            echo 
'socket_bind failed: '.socket_strerror(socket_last_error())."\n";
            exit(
1);
        }
    }
    
socket_getpeername ($socketD$new_addr$new_port);
    
print_r($new_addr ":" $new_port "\n");
    
socket_recvfrom($socketD$input655350$clientIP$clientPort);
    if(
$input=== FALSE) { // 
        
echo 'socket_read() error : '.socket_strerror(socket_last_error())."\n";
        continue;
    } elseif(
strlen($input) === 0) {
        echo 
'socket_read() devolvió cadena vacía : '.socket_strerror(socket_last_error())."\n";
        continue;
    }
    echo 
"Conexión entrante de: ".$clientIP.":".$clientPort." ... \n";

    if(!
socket_connect($socketD$clientIP$clientPort)) {
        echo 
'socket_create error en '.$clientIP.':'.$clientPort.' : '.socket_strerror(socket_last_error())."\n";
        
socket_close($socketD);
        continue;
    }
    
    
$mensaje=pg_escape_bytea($input);
    
$db_postgres=db_connect($CFG->dbhost_postgres$CFG->dbname_postgres$CFG->dbuser_postgres$CFG->dbpass_postgres);
    
$strQuery="INSERT INTO daemon(mensaje) VALUES('$mensaje')";
    
$qid=db_query($strQuery);
    
$flog=fopen($archivo_log,"a+");
    
$input=trim(clean_string($input));
    
fwrite($flog,date("[Y-m-d H:i:s]") . $input ."\n");
    
fclose($flog);

    if(
$arreglo_registro=interpretar_trama_udp($input)){
        if(
nvl($arreglo_registro["status"])=="V"){
            
$ferror=fopen($archivo_error_log,"a+");
            
fwrite($ferror,date("[Y-m-d H:i:s]") . "[Error al insertar el registro] " $input ."\n");
            
fclose($ferror);
        }
        if(!
insertar_registro_gps($arreglo_registro)){
            
$flog=fopen($archivo_log,"a+");
            
fwrite($flog,date("[Y-m-d H:i:s]") . "[Error al insertar el registro] " $input ."\n");
            
fclose($flog);
        }
    }
    elseif(
preg_match("/^\\*(ST)([0-9]+)(.*)\\*$/",$input,$matches)){
        
insertar_mensaje($matches[2],$matches[3]);
    }
    else{
        
$flog=fopen($archivo_log,"a+");
        
fwrite($flog,date("[Y-m-d H:i:s]") . "[Error al interpretar trama] " $input ."\n");
        
fclose($flog);
    }
    
db_disconnect($db_postgres);
}

?>
En funciones.php no veo algo especial que pieda afectar el funcionamiento del script
Este es el error que genera (php ya esta habilitado para soportar Sockets)
Código:
<b>Warning</b>:  socket_getpeername() unable to retrieve peer name [107]: Transport endpoint is not connected in <b>/home/httpd/vhosts/topcolombia.com/httpdocs/proygps/daemon.php</b> on line <b>49</b><br />
__________________
Tino
Linuxcol Soluciones Linux, Manuales, Noticias, foros, Seguridad
Linuxcol.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:35.