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