fread阻塞了TCP套接字上的fwrite

时间:2012-12-20 07:13:24

标签: php sockets blocking fwrite fread

如果我fwrite()没有fread(),那么一切都会在另一端收到。

但是,如果我fwrite()然后fread(),fwrite似乎永远不会发送到管道。好像fread()会导致fwrite挂起,这意味着fwrite永远不会向下发送管道,因此服务器无法获取它并且不会写入响应。这导致两端都挂起。

即使我fflush() ...

也是如此

所以我的服务器在这里得到“hello world”:

$socket = fsockopen("127.0.0.1", 1430, $errno, $errstr, 30);
if($socket) {
    fwrite($socket, "hello world");
    fflush($socket);
}

但不在这里:

$socket = fsockopen("127.0.0.1", 1430, $errno, $errstr, 30);
if($socket) {
    fwrite($socket, "hello world");
    fflush($socket);
    echo fread($socket, 100);
}

编辑:在评论中回答。我的服务器正在读取直到eof所以它挂起,因为客户端挂在fread而不是关闭流。解决方案是读取服务器端的小缓冲区而不是等待eof的阻塞读取调用

0 个答案:

没有答案