PHP Socket客户端:测试服务器连接

时间:2017-08-01 15:25:34

标签: php sockets

我有套接字客户端连接到服务器并等待该服务器发送数据。 它工作正常但是,当服务器断开连接时,必须由套接字客户端检测它才能尝试重新连接。

客户端套接字代码:

$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(包括远程主机已关闭连接的情况)。

因此,函数结果是意外的,我想知道检测服务器断开连接以尝试新连接的正确方法是什么?

提前感谢您的回答。

0 个答案:

没有答案