To whom it may concern, and it may concern you greatly, stream_set_blocking has no effect on stream_socket_accept.
If you want it to return right away, connection or not, use 0 for the timeout parameter.
stream_socket_accept
(PHP 5)
stream_socket_accept — Aceptar una conexión en un socket creado por stream_socket_server()
Descripción
Aceptar una conexión en un socket creado previamente por stream_socket_server(). Si se especifica tiempo_espera , el tiempo de espera predeterminado para el proceso accept del socket será sobrescrito con el tiempo especificado en segundos. El nombre (dirección) del cliente que se ha conectado será pasado de vuelta en nombre_de_par , si se incluye y se encuentra disponible en el transporte seleccionado.
Puede determinarse el valor de nombre_de_par también más adelante, usando stream_socket_get_name().
Si el llamado falla, devolverá FALSE.
Esta función no debería ser usada con sockets de servidor tipo UDP. En su lugar, use stream_socket_recvfrom() y stream_socket_sendto().
Vea también stream_socket_server(), stream_socket_get_name(), stream_set_blocking(), stream_set_timeout(), fgets(), fgetss(), fwrite(), fclose(), feof(), y la extensión Curl.
stream_socket_accept
02-Jan-2008 08:33
18-Jul-2006 10:10
this function, compared to the function socket_accept, got an extra argument "timeout".
To make this function wait indefinitelly to incoming connections, just as in socket_accept, set timeout to -1. It works for me with PHP 5.0.4.
02-Nov-2004 01:58
This code could be very helpfull...
The following code is for the "server". It listen for a message until CTRL-C
<?php
while (true)
{
// disconnected every 5 seconds...
receive_message('127.0.0.1','85',5);
}
function receive_message($ipServer,$portNumber,$nbSecondsIdle)
{
// creating the socket...
$socket = stream_socket_server('tcp://'.$ipServer.':'.$portNumber, $errno, $errstr);
if (!$socket)
{
echo "$errstr ($errno)<br />\n";
}
else
{
// while there is connection, i'll receive it... if I didn't receive a message within $nbSecondsIdle seconds, the following function will stop.
while ($conn = @stream_socket_accept($socket,$nbSecondsIdle))
{
$message= fread($conn, 1024);
echo 'I have received that : '.$message;
fputs ($conn, "OK\n");
fclose ($conn);
}
fclose($socket);
}
}
?>
The following code is for the "client". It send a message, and read the respons...
<?php
send_message('127.0.0.1','85','Message to send...');
function send_message($ipServer,$portServer,$message)
{
$fp = stream_socket_client("tcp://$ipServer:$portServer", $errno, $errstr);
if (!$fp)
{
echo "ERREUR : $errno - $errstr<br />\n";
}
else
{
fwrite($fp,"$message\n");
$response = fread($fp, 4);
if ($response != "OK\n")
{echo 'The command couldn\'t be executed...\ncause :'.$response;}
else
{echo 'Execution successfull...';}
fclose($fp);
}
}
?>
