У меня есть несколько встроенных систем Linux, которые я хочу написать «Кто в сети»? сетевое обслуживание в Ruby. Ниже родственная часть моего кода:'Кто в сети?' Ruby Network Program
mySocket = UDPSocket.new
mySocket.bind("<broadcast>", 50050)
loop do
begin
text, sender = mySocket.recvfrom(1024)
puts text
if text =~ /KNOCK KNOCK/ then
begin
sock = UDPSocket.open
sock.send(r.ipaddress, 0, sender[3], 50051)
sock.close
rescue
retry
end
end
rescue Exception => inLoopEx
puts inLoopEx.message
puts inLoopEx.backtrace.inspect
retry
end
end
Я посылаю команду «Knock Knock» с ПК. Теперь проблема заключается в том, что все они получают сообщение одновременно, они также пытаются ответить одновременно, что вызывает исключение Broken Pipe (что является причиной моего кода «повторного повторного запуска»). Иногда этот код работает нормально, но; в других случаях часть повторной попытки восстановления кода (которая разбужена Исключением Broken Pipe из sock.send) заставляет одну или несколько систем реагировать через 5 секунд или около того.
Есть ли лучший способ сделать это, так как я предполагаю, что я не могу избежать исключения Broken Pipe?