Perl:在客户端套接字中设置读取超时

时间:2010-12-23 08:35:46

标签: perl sockets

我创建了tcp客户端套接字,创建套接字后建立了连接 服务器。然后我正在从服务器上阅读内容。在这种情况下。我需要在阅读中等待10秒钟。如果什么都没有读。它必须在指定的超时时间内返回。是什么方式......?

谢谢

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

perldoc -f alarm

  

如果您想使用alarm超时系统调用,则需要使用eval / die对。由于Perl设置了信号处理程序以在某些系统上重新启动系统调用,因此您无法依赖导致系统调用的警报失败且$!设置为EINTR。使用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 ($@) {
    die unless $@ eq "alarm\n";   # propagate unexpected errors
    # timed out
}
else {
    # didn't
}
     

有关详细信息,请参阅perlipc