Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/12/2005, 16:53
cpwebs
 
Fecha de Ingreso: abril-2002
Ubicación: Buacaramanga - Colombia
Mensajes: 46
Antigüedad: 22 años, 1 mes
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