パートがまだ動作している間に、doens'tが働いているソケットを持っている可能性があるのでしょうか?ソケットは部品を送りますが、部品を受け取ります、可能ですか?
EDIT:ハーフクローズ接続を行わず、かつ、その受信バッファを処理するには長すぎるそのピアの場合
私がエラーを有することができる(したがって、その受信バッファがいっぱいです)私の送っている部分だけで?
パートがまだ動作している間に、doens'tが働いているソケットを持っている可能性があるのでしょうか?ソケットは部品を送りますが、部品を受け取ります、可能ですか?
EDIT:ハーフクローズ接続を行わず、かつ、その受信バッファを処理するには長すぎるそのピアの場合
私がエラーを有することができる(したがって、その受信バッファがいっぱいです)私の送っている部分だけで?
短い答え:はい。リモートピアが低速でデータを受信した場合(recv呼び出し間のデータ処理が遅いため)、送信側での送信が遅くなります.ACKがゆっくりになり、送信バッファがすぐにいっぱいになります。ブロックまたはリターンエラー。一方、TCPは双方向プロトコルであり、TCPスタックはデータ受信に異なるカーネルバッファを使用するため、ローカルピアはリモートピアから送信されたデータを受信できます。
の接続側を閉じると、送信できないソケットを持つことができます。(ハーフクローズ接続)。あなたはshutdown(2)
でそれを行うことができます。このように接続を半分に閉じると、「私は何も言いたくありませんが、あなたが送るものを見ればわかります」と言っています。
もう一方のバッファは違いはありません。あなたがsend
何かをしたら、あなたはピアのバッファに入れません。カーネルのバッファーに入れ、カーネルは後でそれをピアに送ります。
作業接続があり、エラーが発生したポイントまでバッファを充填する可能性はほとんどありませんsend(2)
。
もちろん可能です。例えば、あなたがUNIXドメインソケットを持っていて、誰もそれから読んでいないなら、TCPまたはUDPソケットについて質問しているなら、答えはより複雑になる可能性があります。