2010-12-23 142 views
0

我创建了tcp客户端套接字,创建套接字后与 服务器建立了连接。然后我正在从服务器读取内容。在这种情况下。我只需要等待10秒就可以阅读。如果没有东西被读取。它必须在指定的超时时间内返回。怎么样...?Perl:在客户端套接字中设置读取超时

感谢

回答

1

perldoc -f alarm

如果你想使用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

+0

+1不确定你为什么被低估。 – pilcrow 2012-07-18 02:39:17

2

假设您使用的是标准IO::Socket模块(尽管有较老的方法),您可以在读取之前调用timeout方法将超时设置为10。

相关问题