PHP - 检测远程主机断开连接

时间:2012-01-31 19:25:46

标签: php sockets

根据the documentationsocket_read()应该在远程主机关闭连接时返回FALSE,而在没有更多数据时返回空字符串''读。但是,在我的测试期间,即使关闭远程主机连接,它也永远不会返回FALSE。以下是相关代码:

$data = '';

do {
    $read = socket_read($socket, 1024);

    if ($read === FALSE) {
        throw new SocketDisconnectException();
    }

    $data .= $read;
} while ($read !== '');

即使断开远程主机连接,SocketDisconnectException也永远不会被抛出。我已经进行了两次和三次检查,我没有捕获异常并将其丢弃,甚至将echoexit放入条件中作为完整性检查。

此功能的行为是否已更改,或者我做错了什么?

1 个答案:

答案 0 :(得分:2)

似乎存在一个错误,如果您使用的是PHP_NORMAL_READ,它将在远程断开连接时返回false,但PHP_BINARY_READ将返回“”。 PHP_BINARY_READ是默认值,我建议尝试PHP_NORMAL_READ,如果它适用于您的目的。