2011-02-10 9 views
2

私はLinuxアーキテクチャでコーディングしています。 ソケットサーバーとクライアントに関する質問があります。 サーバーが接続を引き続き受け入れ、クライアントがサーバーに接続されているサンプルコードを作成しました。 何らかの理由でネットワークケーブルが取り外されているため、クライアント側の接続が切断されています(クライアントソケットはPCから外されています)。サーバー側の接続はまだ生きていますが、ネットワークが接続されていないため切断されたことを通知できません。どのようにソケットクライアントが切断されましたか?

クライアントが切断されたことをどのように知ることができますか?

おかげで、すべてのソケットタイプの読み取りのローカルソケットとEOFのため ネール

答えて

0

SIGPIPE。

+0

つのスレッドは、常に私が読んでエラーが発生します読んでブロックしていないが、一方で私は読んでエラーが発生しました。ソケットが切断されていることを知る正確な方法は何ですか? –

1

ソケットでキープアライブを設定するか、アプリケーションレベルのハートビートメッセージを送信する必要があります。そうしないと、リスニングエンドはパケットが到着するまで無期限に待機します。プロトコルを制御すると、アプリケーションレベルのハートビートが簡単になる場合があります。プラスの側面として、どちらのソリューションも、ネットワーク内のNATゲートウェイ間で接続を維持するのに役立ちます。

この回答を参照してください:Is TCP Keepalive the only mechanism to determine a broken link?

はまた、このLinuxのマニュアルを参照してください。http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/#programming

関連する問題