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_INET, SOCK_DGRAM, SOL_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, $input, 65535, 0, $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);
}
?>
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 />