根据the documentation,socket_read()
应该在远程主机关闭连接时返回FALSE
,而在没有更多数据时返回空字符串''
读。但是,在我的测试期间,即使关闭远程主机连接,它也永远不会返回FALSE
。以下是相关代码:
$data = '';
do {
$read = socket_read($socket, 1024);
if ($read === FALSE) {
throw new SocketDisconnectException();
}
$data .= $read;
} while ($read !== '');
即使断开远程主机连接,SocketDisconnectException
也永远不会被抛出。我已经进行了两次和三次检查,我没有捕获异常并将其丢弃,甚至将echo
和exit
放入条件中作为完整性检查。
此功能的行为是否已更改,或者我做错了什么?
答案 0 :(得分:2)
似乎存在一个错误,如果您使用的是PHP_NORMAL_READ,它将在远程断开连接时返回false,但PHP_BINARY_READ将返回“”。 PHP_BINARY_READ是默认值,我建议尝试PHP_NORMAL_READ,如果它适用于您的目的。