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

som*_*guy 2 sockets perl

我在AIX 5.3上的Perl 5.8.2中做了一个sysread.根据文档,sysread当它从文件句柄读取所有读取时应该给0.

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

知道什么可能是错的吗?

谢谢.

hob*_*bbs 5

你是什​​么意思"发送所有数据"?sysread返回零当手柄遇到档案结尾的状态,而不是当没有更多的可用数据,现在.对于套接字,当另一端关闭套接字以进行写入时,会发生EOF读取.(好吧,如果发生网络超时等错误,sysread也会返回undef,在数字上等于零.)

  • 你的客户显然没有关闭它的输出文件句柄,`sysread()`不是通灵的. (2认同)
  • 如果这是一个套接字,客户端可以`shutdown(socket,1)`表示它不再写入.在这种情况发生后,sysread应该返回0,正如这个答案所示. (2认同)