高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先



NW53 - UDP ブロードキャストの受信

(97 年 11 月 17 日)

Q: Open Transport UDP エンドポイントを作成して、UDP ブロードキャストを受信しようとしました。しかし、このエンドポイントは UDP ブロードキャストメッセージをまったく受信しません。パケットをチェックしてみると、UDP パケットはたしかにマシンに到着しています。どこに問題があるのでしょう。

A: この問題に対しては、次の 2 つの原因が考えられます。

1. バインドしているポートがすでに使用されています。このため、OT ではバインドリクエストを別のポートに再ルートしています。このことは、retAddr パラメータを OTBind に渡し、返された fPort フィールドがリクエストしたポートと一致しているかどうかチェックすることで、プログラムを使って確認できます。IP アドレスを再利用できるようになるまでには時間的な遅延が存在するため、ポートがまだ別のアプリケーションによって使用されている状態になっていることが、この問題の一般的な原因です。「Q&A NW 28 - TCP アプリケーションが再起動後に異なるポート・アドレスを取得する」で説明されているコードを使って、この遅延をなくすことができます。この Q&A は TCP エンドポイントに特化した内容になっていますが、そこで説明されているテクニックは TCP エンドポイントと UDP エンドポイントの両方に利用できます。

2. OTBind に特定の IP アドレスを渡しています。接続/データグラムを受信する汎用プログラムでは、特定の IP アドレスではなく、つねに kOTAnyInetAddress (つまり、0) にバインドするようにしてください。マルチホームマシンで、特定のアドレスにバインドすると、その IP 番号にアドレスされる接続/データグラムのみを受信することになります。これは、どの IP アドレスで接続を受信するかによって異なる動作をするサーバを開発する場合には役立ちますが、大多数の汎用コードでは、どの IP アドレスに接続/データグラムが送信されたかという問題にかかわってはいけません。この特殊なケースとして、UDP エンドポイントを特定の IP アドレスにバインドすると、ブロードキャストはバインドした特定の IP アドレスには送信されないため、そのエンドポイントではブロードキャストパケットを受信できなくなります。

-- Quinn "The Eskimo!"
devsupport@apple.com


[ Technical Q&A's : Communications & Collaboration : Networking : NW53 ]