我正在使用IO::Select。
它是normal select
call的OOP包装器,但它公开了can_read()
和can_write()
方法。有没有办法阻止等待读取或写入套接字?这是否(几乎)没有首先击败IO :: Select的目的?
答案 0 :(得分:3)
选择(READ,WRITE,EXCEPTION [,TIMEOUT])
select
是一种静态方法,您可以使用包名new
来调用它。READ
,WRITE
和EXCEPTION
是undef
或IO::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);
答案 1 :(得分:2)
如果没有给出TIMEOUT并且注册了任何句柄,则呼叫将被阻止。
如果您没有通过超时,看起来can_read
和can_write
将阻止。我建议这很少是期望的,尽管可能在某些情况下。
就个人而言,我建议使用众多事件模块之一(POE,AnyEvent等)。要做得更多,但要更清洁地处理更多场景。