2007年2月15日

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

この手の情報を知りたければ:

man 7 tcp (日本語)
man 7 tcp (英語)

を見るのが正解。ioctl()で、送・受信バッファ中のデータ量を知る事ができる。送信バッファなら、相手のカーネルがまだackを返していない量を、受信バッファならまだアプリケーションが読んでいない量を、それぞれ知る事ができる。

ちょっと驚いたのは、答がioctl() を使うだったって事。

Linus 君は ioctl() が大嫌いで、存在自体が邪悪だとかブーブー言ってるので、てっきり違うシステムコールを用意して、そちらで判るようにしているのだと思っていたのだが、あにはからんや、ioctl() とは…。

ちなみに ioctl() が危険だと言うのには同意するが、邪悪だと言うのには同意できないな。kernel 内部の実装をする際に注意不足な Linus 君が実装するべきではない、というのと、それが邪悪であるという事の間には銀河のこちらの端とあちらの端ぐらい距離がある。