2016-04-28 12 views
0

私はTCPブロッキングソケットを使用しているアプリケーションを実行しています。 TCP send()はブロックされていますが、が送信を示し、recv Q = 0です。TCP send()がブロックしています

誰かがなぜsend()をブロックするのかを提案できますか?私は考えることができる

+0

あなたは既に 'connect()'をブロックして成功したと思いますか? –

+0

はい。 bind()とconnect()はすでにブロックしていました。 –

+0

以前は同じ接続でデータを正常に送信しましたか、最初の送信でブロックしましたか?受信プログラムはどのようなものですか? –

答えて

0

2つの理由は、次のようになります。

  • 受信プログラムは、オープンソケットを保持しますが、データを読み取ることはありません。この場合、受信ソケットバッファがいっぱいになると、送信側はそれ以上送信できませんでした。ソケット送信バッファがいっぱいになり、send()がブロックされます。

  • 最初に接続した後、送信者と受信者のネットワーク接続が完全にブロックされます。これにより、通常はタイムアウト後に送信側ソケットに障害が発生し、通常は再現性がありません。

いずれの場合もnetstatの結果と正確には一致しませんが、ソケット送信バッファがいっぱいでない限りtcp send()はブロックしません。

+0

ご清聴ありがとうございました! –

関連する問題