2009-04-30 43 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 
相关问题