我有套接字客户端连接到服务器并等待该服务器发送数据。 它工作正常但是,当服务器断开连接时,必须由套接字客户端检测它才能尝试重新连接。
客户端套接字代码:
$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()) . "\n";
} else {
echo "OK 1.\n";
}
echo "Try connection '$address' on port '$service_port'... \n";
$result = socket_connect($socket, $address, $service_port);
if ($socket === false) {
echo "socket_connect() error : ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 0));
echo "OK 2.\n";
$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);
}
问题是当客户端套接字正确连接到服务器时,有一个值为“资源暂时不可用11”的socket_last_error,并且当服务器不发送数据时,“socket_read”函数返回false。
但是当服务器断开连接时,socket_last_error的值为'Success 0','read'函数返回''
PHP doc说:
socket_read()在成功时以字符串形式返回数据,如果出错则返回FALSE(包括远程主机已关闭连接的情况)。
因此,函数结果是意外的,我想知道检测服务器断开连接以尝试新连接的正确方法是什么?
提前感谢您的回答。