2009-04-30 85 views
10

如何檢測套接字是否半開放?我正在處理的情況是,套接字的另一端發送了FIN並且Ruby應用程序已經確認FIN。有沒有辦法讓我知道插座處於這種狀態?Ruby:如何檢測套接字的一側是否已關閉

舉個例子來說:

require 'socket' 

s = TCPServer.new('0.0.0.0', 5010) 

loop do 
    c = s.accept 

    until c.closed? 
    p c.recv(1024) 
    end 
end 

在這種情況下,當我遠程登錄到端口5010,我會看到我所有的輸入,直到我關閉telnet會話。此時,它會盡可能快地打印空字符串。

+1

這似乎是http://stackoverflow.com/questions/61675/recovering-from-a-broken-tcp-socket-in-ruby-when-in-gets重複,不知道這是否可以幫助任何壽! – gaqzi 2009-04-30 16:02:56

回答

1

您正在使用阻塞調用recv,當另一端關閉時將返回nil。插座在關閉之前不會關閉。更改

until c.closed? 
    p c.recv(1024) 
    end 

while (s = c.recv(1024)) && s > 0 
    p s 
end 
c.close 
相關問題