我需要让阻塞套接字读取超时结束。我读了this问题,我了解到IO::Socket::INET不关注eval/alarm的解决方案。但我在Windows上工作,alarm不能正常工作。还有其他解决方案吗?
eval
alarm
qlvxas9a1#
在从套接字进行阅读之前,使用select的4参数版本(具有所需的超时)来测试套接字上是否有任何数据可供读取。另请参阅IO::Select模块,特别是IO::Select::can_read($timeout)方法,以测试套接字读取是否会阻塞。范例:
select
IO::Select
IO::Select::can_read($timeout)
$read_timeout = 5.0; # seconds $socket = IO::Socket->new( ... ); # socket to read from $selector = IO::Select->new; $selector->add( $socket ); ... @ready = $selector->can_read( $read_timeout ); if (@ready > 0) { $socket->read( $buffer, 128 ); # copy 128 bytes into $buffer } else { warn "data not available on socket now"; }
字符串
1条答案
按热度按时间qlvxas9a1#
在从套接字进行阅读之前,使用
select
的4参数版本(具有所需的超时)来测试套接字上是否有任何数据可供读取。另请参阅
IO::Select
模块,特别是IO::Select::can_read($timeout)
方法,以测试套接字读取是否会阻塞。范例:
字符串