【发布时间】:2010-12-23 08:35:45
【问题描述】:
我已经创建了 tcp 客户端套接字,在创建套接字后建立了连接 服务器 。然后我正在从服务器读取内容。在这种情况下。我只需要在 read 中等待 10 秒。如果什么都没读。它必须在指定的超时时间内返回。什么方法……?
谢谢
【问题讨论】:
我已经创建了 tcp 客户端套接字,在创建套接字后建立了连接 服务器 。然后我正在从服务器读取内容。在这种情况下。我只需要在 read 中等待 10 秒。如果什么都没读。它必须在指定的超时时间内返回。什么方法……?
谢谢
【问题讨论】:
假设您使用的是标准的IO::Socket 模块(尽管有较旧的方法),您调用 timeout 方法将超时设置为 10,然后再读取。
【讨论】:
如果您想使用
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 ($@) { die unless $@ eq "alarm\n"; # propagate unexpected errors # timed out } else { # didn't }欲了解更多信息,请参阅perlipc。
【讨论】: