1

DatagramChannelに関連するいくつかの疑問があります。ソケットがバインドされていて、受信メソッドがバックグラウンドでブロッキング モードで実行されているときに、ケーブルを抜いて簡単なテストを行いました。このソケットに書き込みを行っても、例外はスローされませんでした。
ケーブルを再び差し込んだ後、すべて問題ないように見えます-ソケットはまだバインドされていました。
このテストの後に提起されたいくつかの質問:

1) ソケットを再バインドする必要があるのはいつですか? (システム イベントまたはネットワーク イベントを伴ういくつかのシナリオ)
2) ネットワークに到達できない場合、何らかの例外がスローされますか? (到達不能なインターフェイスにバインドされているソケットに書き込んでいる場合、パケットはキャッシュにバッファリングされ、インターフェイスが起動するのを待ちます)
3) ソケットのチャネルがシステムによって閉じられるのはいつですか?

前もって感謝します。この種のトピック (低レベルの詳細) に関連する本を知っていますか?

4

2 に答える 2

1

これは多少実装に依存しません。ケーブルが抜けた時、OSがメディアの故障を検知して全てのソケットを無効化した可能性がありますが、ここでは発生しませんでした。UDP のようなプロトコルに対しては、真に有効でさえないかもしれません。

このソケットに書き込んでも例外はスローされませんでした。

UDP 経由でブラック ホールに接続されたソケットに書き込みを行ってもかまいません。送信バッファにスペースがあり、送信されるパケットが有効である限り (サイズ、アドレス指定など)、ルーターによって破損したり、途中で失われたりしても、エラーは発生しません。ここでは、原点のかなり近くで失われました。

2) ネットワークに到達できない場合にスローされる例外はありますか? (到達不能なインターフェイスにバインドされているソケットに書き込んでいる場合、パケットはキャッシュにバッファリングされ、インターフェイスが起動するのを待ちます)

一般に、パケットが失われるまでの距離に関係なく、パケットを送信するのは UDP の精神です。

3) ソケットのチャネルがシステムによって閉じられる可能性があるのはいつですか?

コネクションレス プロトコルではない場合。これが TCP の場合、キープアライブ パケットの欠如と通信の一般的な切断が検出され、チャネルが切断されます。

于 2013-10-14T20:29:44.020 に答える
0

1) ソケットを再バインドする必要がある場合は? (システム イベントまたはネットワーク イベントを伴ういくつかのシナリオ)

ソケットを再バインドすることはできません。

2) ネットワークに到達できない場合にスローされる例外はありますか?

「到達不能」エラーが発生する可能性がある場合、ソケットが宛先に接続されていない限り、UDP データグラムの送信で例外が発生することはありません。

(到達不能なインターフェイスにバインドされているソケットに書き込んでいる場合、パケットはキャッシュにバッファリングされ、インターフェイスが起動するのを待ちます)

いいえ。

3) ソケットのチャネルがシステムによって閉じられる可能性があるのはいつですか?

一度もない。自分で閉じる必要があります。

この種のトピック (低レベルの詳細) に関連する本を知っていますか?

この種の詳細については、オラクル、W. Richard Stevens、TCP/IP Illustrated、ボリューム I および II にアクセスする必要があります。

于 2013-10-14T23:45:56.923 に答える