即使在读取一些数据之后,PHP fgets()也总是在套接字上超时

时间:2015-12-19 00:32:36

标签: php sockets blocking fsockopen

我正在以这种方式创建套接字:

$fp = fsockopen("tcp://".$ip, $port, $errno, $errstr);
stream_set_timeout($fp, 1); // timeout is one second
stream_set_blocking($fp, 1); // block until data is available

然而,当我读到时,即使在读取数据后,我总是会超时:

while(true) {
    $result = fgets($fp, 4096);                 
    if(empty($result)) {
        break;
    }
    else {              
        echo $result;
    }
}

我认为我的阅读方法是错误的,因为我不完全理解php套接字在后台如何工作。我的意图是阅读,直到没有更多数据,或者如果我试图读取数据一段时间但没有数据可用,我就会放弃。

在各种PHP套接字示例中,我已经看到使用一段时间(!feof($ fp))来停止读取循环,但就我而言,另一端永远不会发送eof标记。他们只发送换行符分隔的消息。

有什么想法吗?

感谢。

0 个答案:

没有答案