2016-09-22 18 views
0

私はUnixという名前のソケットに接続すると、どの条件でETIMEDOUTを受け取ることができますか?ソケットのタイムアウトが発生すると、 (Unix)

サーバがN秒間に()を受け付けなかった場合、Linuxではどのような典型的なNですか?

+0

私はあなたが 'accept()'でこれを見ることさえ疑うでしょう。あなたは 'send()'や 'recv()'や友達にそれを見るでしょう。 – EJP

答えて

1

サーバのオペレーティングシステムが接続を受け入れない場合は、N秒です。 accept()を呼び出すサーバーアプリケーションは、アプリケーションがaccept()を呼び出すかどうかに関係なく、オペレーティングシステムが自動的に3方向ハンドシェイクを実行するため、通常は関連しません。 TCPスタックは、アプリケーションがこれを行うまで保留中の接続をキューに入れます(バックログの上限まで)。

通常、このタイムアウトは、サーバーが物理的にダウンしているか、ネットワークに通信エラーがある場合にのみ発生します。

Linuxのデフォルトは20秒だと思います。

+0

あなたは本当に 'accept()'でこれを見ますか?確かにTCPは不完全な接続を黙って捨てるだろうか? – EJP

+0

スタックが3ウェイハンドシェイクを完了するまで、接続は 'accept()'で利用可能になりません。 – Barmar

関連する問題