perl 使阻塞超时IO::Socket读取

fruv7luv  于 6个月前  发布在  Perl
关注(0)|答案(1)|浏览(66)

我需要让阻塞套接字读取超时结束。我读了this问题,我了解到IO::Socket::INET不关注eval/alarm的解决方案。但我在Windows上工作,alarm不能正常工作。还有其他解决方案吗?

qlvxas9a

qlvxas9a1#

在从套接字进行阅读之前,使用select的4参数版本(具有所需的超时)来测试套接字上是否有任何数据可供读取。
另请参阅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";
}

字符串

相关问题