2

UDP ソケットを開いてポートにバインドする Linux アプリケーションがあります。ソケットを介してユニキャスト パケットを送信しても問題はありませんでした。ブロードキャスト パケットを送信する機会があったので、ブロードキャスト パケットを通過させる SO_BROADCAST を有効にしましたが、ユニキャスト パケットもブロードキャストされていることに気付きました。これは UDP ソケットの予想される動作ですか、それとも何かを誤って構成した可能性が高いですか?

4

3 に答える 3

0

私はここでプログラミングをあまり実践していませんが、おそらくライブラリ、OSバージョン、コードなどに関する詳細情報を提供する必要があります。おそらくコードサンプルですか?

私が読んだ本を覚えている場合、ソケットにフラグを設定すると、ソケットは基本的にネットワークフラグとファイル記述子のデータ構造であるため、ソケットから送信されるすべてのデータグラムに影響します。

于 2009-04-29T00:58:52.063 に答える
-1

ソケットがユニキャストとブロードキャストを同時に取得することについて、Linuxで同じ問題を解決しました。次のように問題を解決しました(疑似コード):

  1. sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
    • ソケットを開く
  2. setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &1)
    • このソケットからの受信および送信ブロードキャストを許可します
  3. bind(sock, bindaddr, sizeof(struct sockaddr)

bindaddr.sin_family = AF_INET

bindaddr.sin_port = <YourPort>

bindaddr.sin_addr.s_addr = INADDR_ANY

  • 任意のカードのすべての受信メッセージを取得する<YourPort>

警告は、フィルタリングがないことです (3. の警告を参照)。したがって、すべてのメッセージが表示されます。送信されたメッセージは、 で指定されたアドレスに基づいて、ユニキャストまたはブロードキャストされますsendto()

于 2009-07-22T13:56:06.453 に答える