2009-08-04 9 views
0

Rubyのネットワークサービス。以下は私のコードの関連部分です:'オンラインは誰ですか?'私は「オンライン誰を?」書きたいいくつかの組み込み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 

私は 'KNOCK KNOCK'コマンドをPCから送信します。さて、問題は、それら全てが同時にメッセージを受信するので、彼らは(私の「レスキューリトライ」コードの理由で)壊れたパイプ例外が発生した、あまりにも同時に対応しようとしています。このコードは時々OKですが、 (sock.sendからブロークンパイプ例外によりウェークされる)コードの他の時間レスキュー再試行部は、1つ以上のシステムは、5秒ほど後に応答させます。

私は壊れたパイプの例外を逃れるカントと仮定するので、これを行うための良い方法はありますか?

答えて

0

sendコマンドの 'r.ipaddress'部分が例外であることが判明しました。これは組み込みシステムの内部構造に関連しています...

関連する問題