perl Socket接收逾時設定

來源:互聯網
上載者:User

標籤:span   pac   soc   color   images   參考   and   div   預設   

一般來說, IO::Socket::INET裡的Timeout設定是對於conncet的
如果你想設定recv接收逾時, 可以這樣設定:

 1 usr Socket: 2 ...... 3 setsockopt($socket, SOL_SOCKET, SO_RCVTIMEO, pack(‘l!l!‘, 1, 0)); 4 #注意這裡pack有三個參數, 後面的1表示逾時1秒, 最後的0你可以預設 5 #而前面的‘l!l!‘, !表示64位平台 6 #如果你是用IO::Socket::INET他的socket, 可以這樣: 7 use IO::Socket::INET; 8 my $socket = IO::Socket::INET->new(); 9 $socket->setsockopt(SOL_SOCKET, SO_RCVTIMEO, pack(‘l!l!‘, 1, 0));10  11 #如果你覺得麻煩, 可以安裝 IO::Socket::Timeout模組, 用如下方式設定接收逾時或發送逾時:12 # 1. Creates a socket as usual13 my $socket = IO::Socket::INET->new( ... );14  15 # 2. Enable read and write timeouts on the socket16 IO::Socket::Timeout->enable_timeouts_on($socket);17  18 # 3. Setup the timeouts19 $socket->read_timeout(0.5);20 $socket->write_timeout(0.5);21  22 # 4. Use the socket as usual23 my $data = <$socket>;24  25 #

這裡有一點要說明, 可能新人有點迷惑。
那就是io::socket::inet創一個socket時, 這個socket是未定義的, 要等 到它串連成功了才變成定義狀態。
所以, 當你用io::socket::timeout時, 記得要串連成功了才調用, 要不會出現error, 提示方法不能用於一個未定義的變數。

像上面的代碼所示, 如果把20行放到17行的位置, 程式將會出錯。

文章參考自:http://blog.booking.com/socket-timeout-made-easy.html

perl Socket接收逾時設定

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.