Perl:在客户端套接字中设置读取超时
问题描述:
我创建了tcp客户端套接字,创建套接字后与 服务器建立了连接。然后我正在从服务器读取内容。在这种情况下。我只需要等待10秒就可以阅读。如果没有东西被读取。它必须在指定的超时时间内返回。怎么样...?Perl:在客户端套接字中设置读取超时
感谢
答
如果你想使用
alarm
超时系统调用,你需要使用一个eval
/die
对。您不能依靠引起系统调用失败的警报,$!
设置为EINTR
,因为Perl会设置信号处理程序以在某些系统上重新启动系统调用。使用eval
/die
总是有效,模以Signals in perlipc中给出的注意事项。eval { local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required alarm $timeout; $nread = sysread SOCKET, $buffer, $size; alarm 0; }; if ([email protected]) { die unless [email protected] eq "alarm\n"; # propagate unexpected errors # timed out } else { # didn't }
欲了解更多信息,请参阅perlipc。
+1不确定你为什么被低估。 – pilcrow 2012-07-18 02:39:17