2011-10-13 9 views
6

ブロードキャスト送信用のポートをリッスンしているUDPソケットがあり、正常に動作しています。UDPリスニングソケットは、ネットワーク構成の変更後にリッスンを停止します。

しかし、OSを休止して再開すると(Windows 7)、ソケットはデータの受信を停止します(Wiresharkを使用してデータが到着していることがわかります)。

これは、自分のIPアドレスを変更したり、ネットワークアダプタを無効にしたり、有効にしたりするようなネットワーク設定を変更した場合にも発生します。

OSは、休止状態になるとすべてのネットワークアダプタを無効にし、再開時に再び有効にするようです。

selectは、0(タイムアウト)を返すだけで、データを受信して​​いないときと変わりません。私はどこにでもこの行為への参照を見つけることができませんでした。

ソケットを閉じて再作成すると、再び動作します。

OSを再開しても、TCPリスニングソケットが正常に動作しています。

この状況をどのように検出して修正するかについてのアイデアはありますか?

EDIT:これはまだ直接アドレスデータを受信して​​いますが、これ以上ブロドキャスト送信を受信しません。

EDIT2:はちょうど私があなたのコードが明示的に0.0」にソケットをバインドしていないと思う...私は(どこかにダミーパケットを送信する)ソケットに書き込む場合、それが再び動作を開始していること

+0

関連するウィンドウのバージョンでタグを追加したい場合があります – jgauffin

+0

ソケットがバインドされているアドレスは何ですか? – User

答えて

1

を発見.0.0 "アドレス。だからあなたが送られたとき、それはその時に利用可能なインターフェースIPをバインドします。このIPが変更されるか、またはインターフェイスが無効になると、このソケットはTCP/IPスタックによってリセットされます。あなたのTCPソケットでは、 "0.0.0.0"アドレスにバインドされている必要があります。そのため、IP /インターフェースの変更に関係なく常に接続を待ち受けます。 udpソケットを "0.0.0.0"にバインドしてからデータを送信することもできます。これにより、ハイバネーションやIPの変更後でも動作します。

関連する問題