TCP 서버 (즉, netcat)에 연결하는 루비 코드가 있습니다. 그것은 20 회 반복되며 "ABCD"를 보냅니다. netcat을 죽이면 예외가 발생하기 위해 루프를 두 번 반복합니다. netcat이 죽은 후 첫 번째 루프에서 아무 예외도 발생하지 않고 "send"는 5 바이트가 올바르게 기록되었다고보고합니다. 물론 결국 서버가 절대로 수신하지 못했기 때문에 어느 쪽이 맞지 않습니다.Ruby TCPSocket은 서버가 종료되었을 때 알리지 않습니다.
이 문제를 해결할 방법이 있습니까? 지금은 데이터를 잃어 버리고 있습니다. 올바르게 전달되었다고 생각하기 때문에 다시 재생하지 않을 것입니다.
#!/usr/bin/env ruby
require 'rubygems'
require 'socket'
sock = TCPSocket.new('192.168.0.10', 5443)
sock.sync = true
20.times do
sleep 2
begin
count = sock.write("ABCD ")
puts "Wrote #{count} bytes"
rescue Exception => myException
puts "Exception rescued : #{myException}"
end
end
이 소켓에서 읽는 IO.select가 true를 반환합니다. 그래서 적어도 당신이 그것을 사용한다면, 당신은 읽을 줄 알게 될 것입니다. 그리고 그것은 오류를 던질 것입니다. 조용히 실패하는 것보다 훨씬 낫습니다. 이 답변을 게시 해 주셔서 감사합니다. 그것은 다른 사람들이이 이상한 행동을 보는 것을 나에게 더 기분 좋게 만듭니다. 참고 : jruby와 mri 1.9.3에서이 내용을 볼 수 있습니다. – kbrock