私はTCPブロッキングソケットを使用しているアプリケーションを実行しています。 TCP send()
はブロックされていますが、が送信を示し、recv Q = 0
です。TCP send()がブロックしています
誰かがなぜsend()
をブロックするのかを提案できますか?私は考えることができる
私はTCPブロッキングソケットを使用しているアプリケーションを実行しています。 TCP send()
はブロックされていますが、が送信を示し、recv Q = 0
です。TCP send()がブロックしています
誰かがなぜsend()
をブロックするのかを提案できますか?私は考えることができる
2つの理由は、次のようになります。
受信プログラムは、オープンソケットを保持しますが、データを読み取ることはありません。この場合、受信ソケットバッファがいっぱいになると、送信側はそれ以上送信できませんでした。ソケット送信バッファがいっぱいになり、send()がブロックされます。
最初に接続した後、送信者と受信者のネットワーク接続が完全にブロックされます。これにより、通常はタイムアウト後に送信側ソケットに障害が発生し、通常は再現性がありません。
いずれの場合もnetstatの結果と正確には一致しませんが、ソケット送信バッファがいっぱいでない限りtcp send()はブロックしません。
ご清聴ありがとうございました! –
あなたは既に 'connect()'をブロックして成功したと思いますか? –
はい。 bind()とconnect()はすでにブロックしていました。 –
以前は同じ接続でデータを正常に送信しましたか、最初の送信でブロックしましたか?受信プログラムはどのようなものですか? –