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

7
根据文档socket_read()在远程主机关闭连接时应该返回FALSE,当没有更多数据可读时返回空字符串''。然而,在我的测试中,即使关闭了远程主机的连接,它也从未返回FALSE。以下是相关代码:
$data = '';

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

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

    $data .= $read;
} while ($read !== '');
SocketDisconnectException 从未被抛出,即使我断开了远程主机连接。 我已经反复检查过,没有捕获并丢弃异常,甚至在条件语句中加入了 echoexit 作为健全性检查。
这个函数的行为改变了吗?还是我做错了什么?
1个回答

3

似乎存在一个bug,如果您使用PHP_NORMAL_READ,在远程断开时会返回false,但是PHP_BINARY_READ会返回""。 PHP_BINARY_READ 是默认值,如果适用于您的目的,建议尝试使用PHP_NORMAL_READ。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接