我有几个嵌入式Linux系统,我想写一个'谁在线?' Ruby中的网络服务。以下是我的代码的相关部分:
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
我从PC发送'KNOCK KNOCK'命令。现在,问题是因为它们都同时收到消息,它们也会同时响应,这会导致Broken Pipe异常(这是我'救援重试'代码的原因)。这段代码有时可行,但是;其他时候救援重试代码的一部分(由sock.send的Broken Pipe异常唤醒)会导致一个或多个系统在5秒左右后响应。
是否有更好的方法可以做到这一点,因为我认为我无法摆脱Broken Pipe异常?
答案 0 :(得分:0)
我发现异常是由send命令中的'r.ipaddress'部分引起的,这与我的嵌入式系统的内部结构有关...