Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的Perl sysread在从套接字读取时会阻塞?_Perl_Sockets - Fatal编程技术网

为什么我的Perl sysread在从套接字读取时会阻塞?

为什么我的Perl sysread在从套接字读取时会阻塞?,perl,sockets,Perl,Sockets,我正在AIX5.3上用Perl5.8.2做一个测试。根据文档,sysread在从filehandle读取所有读取数据时,应该给出0 在我的场景中,文件句柄是STDIN并指向套接字。所以我基本上是从一个套接字执行sysread。但我从未从sysread中获得0,它只是阻塞,即使在客户端发送了所有数据之后也是如此 你知道哪里不对吗 谢谢。你说的“发送所有数据”是什么意思sysread当句柄遇到文件结束条件时返回零,而不是当现在没有更多可用数据时。对于套接字,当另一端关闭套接字进行写入时,会发生EOF

我正在AIX5.3上用Perl5.8.2做一个测试。根据文档,
sysread
在从filehandle读取所有读取数据时,应该给出0

在我的场景中,文件句柄是STDIN并指向套接字。所以我基本上是从一个套接字执行
sysread
。但我从未从
sysread
中获得0,它只是阻塞,即使在客户端发送了所有数据之后也是如此

你知道哪里不对吗

谢谢。

你说的“发送所有数据”是什么意思
sysread
当句柄遇到文件结束条件时返回零,而不是当现在没有更多可用数据时。对于套接字,当另一端关闭套接字进行写入时,会发生EOF on read。(如果出现网络超时等错误,
sysread
也将返回
undef
,该值在数字上等于零。)

检查该命令(具有4个参数的命令)。它可以告诉你
文件句柄上是否有任何要读取的输入。

我在while循环中使用sysread从套接字读取数据。。但即使在我的客户发送了所有数据后,它仍然会阻塞。。sysread只是阻塞..您的客户端显然没有关闭它的输出文件句柄,
sysread()
不是通灵的。但是我需要保持套接字打开..因为服务器必须发送一些数据。。只有这样我才能关上它。。如果我关闭套接字..那么sysread工作。。我需要使sysread非阻塞。如果这是一个套接字,客户端可以
shutdown(socket,1)
发出不再写入的信号。正如这个答案所示,在发生这种情况后,sysread应该返回0。