2008-09-19 20 views
1

TCPソケットに送信されたものの、まだワイヤに置かれていないバイト数を検出するにはどうすればよいですか?TCP送信キューの深さ

ここで図を見て:私は、カテゴリー2の合計を知りたい3、および4または3と4の合計が、これはC(++)で、両方の上にあるでしょう

WindowsおよびLinux理想的には、私が使用できるioctlがありますが、何も存在しないようです。

+0

あなたは何をしたいですか?現在の問題が分かっていれば誰かを助けるかもしれない。 – terminus

+0

私は、キューにデータを追加するか更新を統合するかを決定しようとしています。着信データレートが発信レートよりもはるかに高いので、バッファとネットワークを簡単にオーバーフローさせます。しかし、私はユーザーエクスペリエンスを犠牲にしていくつかの更新を保留することができます。 – Matt

答えて

0

いくつかのUnixフレーバにはこれを行うためのAPIがあるかもしれませんが、さまざまなバリエーションで移植可能な方法はありません。

3

Linuxでは、tcp(7)のマニュアルページを参照してください。

あなたが

その他の統計情報がTCP_INFOのはgetsockopt()の呼び出しによってバック与えられた構造体のメンバから利用できる場合があります...のioctl(靴下、SIOCINQにより未送信バイト数を取得することができるように思われる。

0

データを追加するかどうかを判断したい場合:データがキューに入るまで送信はブロックされますので心配しないでください。ブロックしたくない場合は、send(2)に伝えることができます:

send(socket, buf, buflen, MSG_DONTWAIT); 

これはLinuxのみで動作します。

また、ノンブロッキングにソケットを設定することができます。データをストリームに書き込むことができない場合

fcntl(socket, F_SETFD, O_NONBLOCK); 

この方法で書き込みエラー(EAGAIN)を返します。

関連する問題