Tema: Sockets
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/09/2014, 14:03
dpinos
 
Fecha de Ingreso: septiembre-2014
Mensajes: 2
Antigüedad: 9 años, 7 meses
Puntos: 1
Sockets

Buenas tardes, ayudenme con un problema que tengo el cual se los expongo:
Tengo un socket client de lado de php, este socket funciona bien, envia y recibe datos normalmente, el problema esta en el timeout que se le setea al socket. Cuando mi fuente php esta en un equipo windows el socket_recv funciona con normalidad, al pasar este fuente a cualquier equipo con linux este espera todo el timeout que s establece en la config. Este s mi codigo:

$response = '';
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket !== FALSE) {
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 20, "usec" => 0));
$result = socket_connect($socket, IP_SOCKET_EASYLOAD, PORT_SOCKET_EASYLOAD);
if ($result !== FALSE) {
$result = socket_write($socket, "ACTION=TEST" . "\r\n");
echo date("Y-m-d H:i:s"),"<br/>";
socket_recv($socket, $response, 1028, MSG_WAITALL);
echo $response."--".date("Y-m-d H:i:s");
}
}

Cuando ejecuto ese codigo en un windows el programa recibe la respuesta en aproximademente 1 o 2 segundos.

Cuando ejecuto ese mismo codigo en un linux el programa a pesar de haber recibido la respuesta en el mismo tiempo (lo se porque el server socket ya envio la respuesta) este espera los 20 segundos del timeout para hacer el echo; el timeout se lo setea en esta linea:

socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 20, "usec" => 0));

Y si quito esta linea del codigo, en window si ejecuta con normalidad, pero en linux se quedo inhibido, es decir queda en una espera infinita ya que si no se define esta funciona por default el timeout es 0 que quiere decir espera infinita.

Por favor si alguien me ayuda con este problema porque realmente me tiene desconcertado este asunto, ya googlee y no encuentro ninguna solucion.