I have socket client which connects to server and which wait for datas to be sent by this server. It works fine but, when server has a disconnection, it has to be detected by socket client in order to try a reconnection.
Client socket code :
$co = false;
while (!$co) {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create()error : " . socket_strerror(socket_last_error()) . "
";
} else {
echo "OK 1.
";
}
echo "Try connection '$address' on port '$service_port'...
";
$result = socket_connect($socket, $address, $service_port);
if ($socket === false) {
echo "socket_connect() error : ($result) " . socket_strerror(socket_last_error($socket)) . "
";
} else {
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 0));
echo "OK 2.
";
$co = true;
}
}
while (true) {
echo 'read' . PHP_EOL;
socket_clear_error($socket);
$out = socket_read($socket, 2048);
$socket_last_error = socket_last_error($socket);
$strErr = socket_strerror($socket_last_error) . ' ' . $socket_last_error;
echo("socket_last_error : " . $strErr);
var_dump($out);
}
Problem is when client socket is correctly connected to server, there's socket_last_error with value 'Resource temporarily unavailable 11' and 'socket_read' function return false when server doesn't send data.
But when server is deconnected, there's socket_last_error with value 'Success 0' and 'read' function return ''
PHP doc says :
socket_read() returns data as string on success, or FALSE on error (including case where remote host has closed connection).
So functions results are unexpected and I would like to know what's the right method to detect a server disconnection in order to try a new connection?
Thanks in advance for your answers.