2007年3月12日

Windows で TCP/IP の送信バッファ・受信バッファに残っているデータ量を知る方法

えー、ここで尋ねられたので、一応調べてみようと言う気になったのだが(IE6でうまく表示できないとか教えてもらったし)…残念ながらいい方法は見つかりませんでした。

まず調べ方を説明しましょう。
  1. 大抵の場合、Windows もののプログラミング系調査は http://msdn.microsoft.com/ から始めるのがよさそうです。
  2. TCP/IP は Windows では Winsock という名前のはずなので、右上の検索で winsock を検索します。
  3. Winsock Reference という「おい、それだろう…」と言いたくなるようなポイントがあるので、それをクリックします。
  4. で、ここから先は…全探索です。端から端まで読むしかありませぬ。 orz
で、一応調べた結果わかった事は次の通り:
  1. 受信バッファにどれぐらいあるか、は「受信バッファから atomic にどれぐらい読み出せるか」という意味だと摩り替えると、ioctlsocket() と WSAIoctl() のどちらかを使えば出来る。
    マニュアルを読む限り、どちらがどちらに比べてよい、という事はなさそう。結局 cmd に FIONREAD を与えると、得られるらしく、ようするに途中から同じルーチンなのではないかと。注に気をつけること。
  2. 送信バッファにどれぐらい溜まっているか、を調べる術は無いらしい。少なくとも見つかりませんでした。
この手の調査で一番難しいのはないものを延々さがし続けること。適当な所で諦めるのが肝心だが、実は手段があったりすると調査不足と言われるのが悔しかったりする。

なので、やり方を知っている、もっと簡便な方法があると知っている人の情報があったら、是非教えてください。