Ruby: Как обнаружить, когда одна сторона сокета была закрыта

Как я могу обнаружить, что сокет является полуоткрытым? Случай, с которым я имею дело, - когда другая сторона сокета отправила FIN, и приложение Ruby имеет ACKed тот FIN. Существует ли способ для меня сказать, что сокет находится в этом условии?

Возьмите, например:

require 'socket'

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

loop do
  c = s.accept

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

В этом случае, когда я telnet в порт 5010, я буду видеть весь свой вход, пока я не закрою сеанс telnet. В той точке это распечатает пустые строки много раз с такой скоростью, как это может.

11
задан Matthew Murdoch 30 April 2009 в 15:51
поделиться