永夜海 发表于 2018-8-31 06:33:05

perl中调用recv函数阻塞,设置超时

1234567eval{local$SIG{ALRM} = sub{ die"alarm time out"};alarm$TIMEOUT;$sock->recv($msg, $MAXLEN)      or die"recv: $!";alarm0;1;# return value from eval on normalcy} or die"recv from $server_host timed out after $TIMEOUT seconds.\n";  #定义ALRM发生信号时的操作,这里发信给客户端并断开链接,子进程退出
  $SIG{ALRM} = sub {
  print "recv timeout\n";
  ##syswrite($session,"timeout");
  my $bytes=send($session,"timeout",0);
  &log($bytes);
  close($session);
  exit();
  };
  alarm( 30 ); #同上,一般放在会超时的操作代码
  my $bs=recv($session,$buf,2048,0);
  &log($bs);
  alarm( 0 );

页: [1]
查看完整版本: perl中调用recv函数阻塞,设置超时