C#でソケットが接続/切断されているかどうかを確認するには?
2023-08-04 19:45:43
質問
ネットワーク ソケット (System.Net.Sockets.Socket) が切断されたときに相手ホストがパケットを送信しない場合 (例: 非グレースティックに切断されたため)、どのようにしてまだ接続しているかどうかを確認することができますか?
どのように解決するのですか?
として
ポール・ターナー
回答済み
Socket.Connected
はこのような状況では使用できません。接続がまだアクティブかどうかを確認するために、毎回接続をポーリングする必要があります。これは私が使用したコードです。
bool SocketConnected(Socket s)
{
bool part1 = s.Poll(1000, SelectMode.SelectRead);
bool part2 = (s.Available == 0);
if (part1 && part2)
return false;
else
return true;
}
このように動作します。
-
s.Poll
が真を返した場合- 接続が閉じている、リセットされている、終了している、または保留中である (アクティブな接続がないことを意味する) 場合。
- 接続が有効で、読み取り可能なデータがある状態
-
s.Available
読み出し可能なバイト数を返します。 -
がともに真の場合
- 読み込めるデータがないため、接続はアクティブではありません。
関連
-
[解決済み] 関数を終了するには?
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] 乱数(int)を生成する方法を教えてください。
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み】接続タイムアウトエラーを人為的に発生させる
-
[解決済み] ネットワークケーブル/コネクタの物理的な接続状態を検出するにはどうすればよいですか?
-
[解決済み】既存の接続がリモートホストによって強制的に切断されました。
-
[解決済み] サーバーソケットからのクライアントの切断を即座に検出する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】C#で四捨五入する方法
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である