TCP ソケットに送信されたがまだ送信されていないバイト数を確認するにはどうすればよいですか?
カテゴリ 2、3、4 の合計、または 3 と 4 の合計を知りたいです。これは C(++) で、Windows と Linux の両方にあります。理想的には、使用できる ioctl があるのですが、ないようです。
TCP ソケットに送信されたがまだ送信されていないバイト数を確認するにはどうすればよいですか?
カテゴリ 2、3、4 の合計、または 3 と 4 の合計を知りたいです。これは C(++) で、Windows と Linux の両方にあります。理想的には、使用できる ioctl があるのですが、ないようです。
Linux では、tcp(7) の man ページを参照してください。
ioctl(sock,SIOCINQ ... で未送信バイト数を取得できるようです。
他の統計は、TCP_INFO getsockopt() 呼び出しによって返される構造体のメンバーから利用できる場合があります。
一部の Unix フレーバーには、これを行う API の方法がある場合がありますが、異なるバリアント間で移植可能な方法はありません。
データを追加するかどうかを決定したい場合: 心配しないでください。データがキューに入るまで送信はブロックされます。ブロックしたくない場合は、send(2) を指定できます。
send(socket, buf, buflen, MSG_DONTWAIT);
ただし、これは Linux でのみ機能します。
ソケットをノンブロッキングに設定することもできます:
fcntl(socket, F_SETFD, O_NONBLOCK);
この方法では、データをストリームに書き込めない場合、write はエラー (EAGAIN) を返します。