私はそれがソケットを作成しようとしているループ内で実行されるように、特定のWebページに接続する接続、データを送信するためにTCPソケットを使用していますソケットを受信して閉じます。問題はランダム反復と特定のWebサイトでs.connect()がタイムアウトすることです。私はそうソケットプログラミング - s.connect()タイムアウト
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
は運で追加されたTCPのTIME_WAITについて読みました。各繰り返しの後に1秒間スリープしますが、まだ運がありません。 もう少し遅いネットワークではうまく動作しますが、高速なコードでは動作しないことに注意してください。
while(1)
{time.sleep(1)
s = socket.socket() #TCP socket creation
s.settimeout(2) # 2 seconds for time-out which is more than needed
s.connect()
s.send(message) #which is a HTTP get request
s.recv() # which is a HTTP response
s.close()}
私のコードルーチンの手順、ソケットの各メソッドが正しく実装されているが、次の、しかし、私は、接続にタイムアウトを取得する: iは、以下の擬似コードは、より多くのそれを明確にすることができると思います。私はサーバーが正常に機能していると確信しています。私はそれがTCP time_waitと何か関係があるかもしれないと思ったが、コメントは同意していないようだ。
REUSEADDR上の明確化のために感謝します。私が前に述べたようにループで接続しようとしたときに発生するので、出力は次のようになります:タイムアウト、RTT = 8ミリ秒での成功、RTT = 7ミリ秒での成功、 –
@HamedTemsah明示的な接続タイムアウトを設定しましたか?再接続の間に接続を完全に閉じていますか? – smassey
@HamedTemsah:これはサーバーがダウンしていてサーバーが過負荷になっていないことをどのように知っていますか?あなたはサーバーのコントロールを持っていますか?そして、あなたはおそらく非常に短い接続タイムアウトを設定しますか? –