我創建了tcp客戶端套接字,創建套接字後與 服務器建立了連接。然後我正在從服務器讀取內容。在這種情況下。我只需要等待10秒就可以閱讀。如果沒有東西被讀取。它必須在指定的超時時間內返回。怎麼樣...?Perl:在客戶端套接字中設置讀取超時
感謝
我創建了tcp客戶端套接字,創建套接字後與 服務器建立了連接。然後我正在從服務器讀取內容。在這種情況下。我只需要等待10秒就可以閱讀。如果沒有東西被讀取。它必須在指定的超時時間內返回。怎麼樣...?Perl:在客戶端套接字中設置讀取超時
感謝
如果你想使用
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。
假設您使用的是標準IO::Socket模塊(儘管有較老的方法),您可以在讀取之前調用timeout方法將超時設置爲10。
+1不確定你爲什麼被低估。 – pilcrow 2012-07-18 02:39:17