我正在寫一個將打開tcp套接字和流數據的Ruby客戶端。Ruby套接字編程中的標準套接字超時(秒)是多少?
如果我無法在20秒內打開套接字,我將觸發超時錯誤。
begin
Timeout::timeout(20) { socket = open_socket(host, port) }
rescue Errno::ECONNREFUSED
puts "Failed to connect to server"
rescue Timeout::Error
puts "Timeout error occurred while connecting to the server"
end
我的open_socket方法如下。
def open_socket(host,port)
TCPSocket.new(host,port)
end
代碼正常工作。我的問題是
- 什麼是套接字編程秒標準超時時間?
- 是否可以根據我們的需要設置超時秒數?
這是特定於ruby的實現(我非常肯定它可能不適用於Jruby/rubinius)。而且,使用Timeout.timeout通常是一個糟糕的主意。性能:Timeout.timeout通過產生線程(代價高昂)工作。功能:Timeout.timeout取決於可中斷的阻塞呼叫。脆弱性:它通過在區塊中引發異常而發揮作用,這可以發生在任何地方。例如,它可能會在插槽建成後立即引發,這會導致泄漏(只有在GC啓動時插槽纔會關閉) –
是的,sylvain.joyeux您給出了正確的建議。 – kanna