繁体   English   中英

如何使用IO :: Select阻止等待读或写套接字?

[英]How can I block waiting for either a read or write socket using IO::Select?

我正在使用IO :: Select

它是普通select调用的OOP包装器,但它公开了can_read()can_write()方法。 有没有办法阻止等待读或写套接字? 这是否(几乎)没有打败拥有IO :: Select的目的?

使用IO::Select->select

选择(READ,WRITE,EXCEPTION [,TIMEOUT])

select是一个静态方法,即使用包名称(如new调用它。 READWRITEEXCEPTIONundefIO::Select对象。 TIMEOUT是可选的,其作用与核心选择调用相同。

结果将是一个由3个元素组成的数组,每个元素都是对数组的引用,该数组将保存准备好读取,写入和分别具有异常的句柄。 出现错误时,将返回一个空列表。

例如:

my $rsel  = IO::Select->new($rfh);
my $wsel  = IO::Select->new($wfh);
my $esel  = IO::Select->new($rfh, $wfh);

my @ready = IO::Select->select($rsel, $wsel, $esel, undef);

如果未给出TIMEOUT且未注册任何句柄,则调用将阻塞。

如果您不通过超时, can_readcan_write 阻塞。 我建议这虽然在某些情况下可能很少需要。

就个人而言,我建议改用许多事件模块之一(POE,AnyEvent等)。 要进行的工作还多一些,但可以更轻松地处理更多方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM