From: Takahiro Kambe Date: 2007-08-01T17:07:30+09:00 Subject: [ruby-list:43769] Re: UDP通信時のエラー検出 In message <6DC7D411CB0FB4konishi@raax.co.jp> on Wed, 1 Aug 2007 16:59:01 +0900, 小西 弘将 wrote: > TCPと異なり、UDPは送信エラー等をチェックしないので、アプリケーションレベ > ルで対応するしかないのでは無いでしょうか。 socketなインターフェイスで、connect(2)したUDPのソケットだと、ちょっと だけ気を効かせてくれます。(何度もconnect(2)できるとかもありますが。) RubyのSocketクラスで、それをどのようにしているかは知りませんので、 以下は生のUNIXなシステムレベルの話となります。 > >同一ネットワーク上のマシンへ UDP パケットを送信した際に、 > >ポートが閉じている、接続できないなどのエラーを > >検出する方法が分かりません。 接続という概念はUDPにはないので、「接続できない」エラーは基本的にあり ません。例外として、オペレーティング・システムに何らかのリソースが足り なくて、connect(2)が失敗した場合のエラーは検出できるでしょう。 また、connect(2)したUDPのソケットだと、ICMPのport unreachable等が返っ てきた場合に、次の送信の処理でエラーを返してくれます。 繰り返しますが、以上はシステムコールのレベルの話で、RubyのSocketライブ ラリでどのように扱われているかはわかりません。 -- 神戸 隆博(かんべ たかひろ) at 仕事場