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

FtD*_*Xw6 7 php sockets

根据文档,socket_read()应该FALSE在远程主机关闭连接时返回,并''在没有更多数据要读取时返回空字符串.但是,在我的测试期间FALSE,即使关闭远程主机连接,它也永远不会返回.这是相关代码:

$data = '';

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

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

    $data .= $read;
} while ($read !== '');
Run Code Online (Sandbox Code Playgroud)

SocketDisconnectException永远不会被抛出,甚至当我断开远程主机连接.我已经双重和三重检查,我不是捕捉异常并丢弃它,即使在抛出echoexit入条件的完整性检查.

这个功能的行为是否改变了,或者我做错了什么?

The*_*eOx 3

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