【问题标题】:Perl : Set read timeout in client socketPerl:在客户端套接字中设置读取超时
【发布时间】:2010-12-23 08:35:45
【问题描述】:

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

谢谢

【问题讨论】:

    标签: perl sockets


    【解决方案1】:

    假设您使用的是标准的IO::Socket 模块(尽管有较旧的方法),您调用 timeout 方法将超时设置为 10,然后再读取。

    【讨论】:

      【解决方案2】:

      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 ($@) {
          die unless $@ eq "alarm\n";   # propagate unexpected errors
          # timed out
      }
      else {
          # didn't
      }
      

      欲了解更多信息,请参阅perlipc

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 2011-07-31
        • 2017-06-01
        • 2021-06-02
        • 2018-11-23
        • 1970-01-01
        相关资源
        最近更新 更多