我创建了tcp客户端套接字,创建套接字后建立了连接 服务器。然后我正在从服务器上阅读内容。在这种情况下。我需要在阅读中等待10秒钟。如果什么都没有读。它必须在指定的超时时间内返回。是什么方式......?
谢谢
答案 0 :(得分:3)
假设您使用的是标准的IO::Socket模块(虽然有较旧的方法),您可以在读取之前调用timeout方法将超时设置为10.
答案 1 :(得分:1)
如果您想使用
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。