簡體   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