2010-12-23 138 views
0

我創建了tcp客戶端套接字,創建套接字後與 服務器建立了連接。然後我正在從服務器讀取內容。在這種情況下。我只需要等待10秒就可以閱讀。如果沒有東西被讀取。它必須在指定的超時時間內返回。怎麼樣...?Perl:在客戶端套接字中設置讀取超時

感謝

回答

1

perldoc -f alarm

如果你想使用alarm超時系統調用,你需要使用一個eval/die對。您不能依靠引起系統調用失敗的警報,$!設置爲EINTR,因爲Perl會設置信號處理程序以在某些系統上重新啓動系統調用。使用eval/die總是有效,模以Signals in perlipc中給出的注意事項。

eval { 
    local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required 
    alarm $timeout; 
    $nread = sysread SOCKET, $buffer, $size; 
    alarm 0; 
}; 
if ([email protected]) { 
    die unless [email protected] eq "alarm\n"; # propagate unexpected errors 
    # timed out 
} 
else { 
    # didn't 
} 

欲瞭解更多信息,請參閱perlipc

+0

+1不確定你爲什麼被低估。 – pilcrow 2012-07-18 02:39:17

2

假設您使用的是標準IO::Socket模塊(儘管有較老的方法),您可以在讀取之前調用timeout方法將超時設置爲10。

相關問題