2010-12-05 9 views
1

接続のタイムアウトがerrnoに設定されている場合があることに気付きましたが、なぜこれが行われるのかわかりません。そして、どうやってこれに対処すると思いますか? (私が推測しているのは、接続の1つがタイムアウトした、おそらくACKが適切なタイミングで戻ってこなかったということです)。 Idは、サーバーソケットがそこにあり、以前に非ブロック接続を実行していた場合、これが唯一の正当なケースであると想像してください。この場合、このソケットの接続を再度実行すると、接続されているかどうかが返されますが、それはそれを処理する方法になりますが、より良い方法がありますか?select()コールの文脈でConnection Timeoutが意味するもの

ありがとうございます。

+0

はい、これは非ブロック型の 'connect'でのみ起こるはずですが、非ブロック型の' connect'を 'select'と使う正しい方法を忘れてしまいますので、答えではなくコメントとして記述しています。 –

答えて

0

上記のコメント者が言ったように、これはおそらくノンブロッキングconnect()select()の結果です。これが一般的なタイムアウトでない限り、受け入れられたTCPソケットでも時々起こる可能性があります。以下のいずれかの方法では、select()の使用状況にあなたの記憶をリフレッシュするために2つの非常に便利なガイドです:

http://www.lowtek.com/sockets/select.html

http://beej.us/guide/bgnet/output/html/multipage/advanced.html#select

http://beej.us/guide/bgnet/output/html/multipage/advanced.html#blocking

もPythonの例については、この質問を参照してください。

How can I get non-blocking socket connect()'s?

乾杯。

関連する問題