我需要让阻塞套接字读取超时结束。我读了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";}
$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)
方法,以测试套接字读取是否会阻塞。范例:
字符串