0

私は、ioctl(FIONREAD) を使用して、Linux の Raw Socket 受信バッファーで保留中のオクテットの数を判断し、recv を呼び出す実装を持っています。

Linux の raw ソケットの ioctl インターフェイスが、実際に保留中のオクテットを実際に返さないことをどこかで読みました。これは正しいです?

高負荷で時々いくつかのメッセージを失い、これまでのところどこにあるのかわからなかったので、私は尋ねています。Raw ソケットで保留中のオクテットの数を把握するためのより良い方法はありますか。

4

1 に答える 1

1

アプリケーションがパケットレートに追いつけない場合、カーネルがパケットをドロップする可能性が常にあります (カーネルバッファーが無制限ではないため)。

ところで、とにかくオクテット数を知る必要があるのはなぜですか? これらはパケット ソケットであるため、パケットの長さはネットワーク インターフェイスの最大フレーム サイズによって常に制限されるため、recv に十分な大きさのバッファを渡すだけです。

そうは言っても、パフォーマンスが重要な場合は、 Linux での PACKET_MMAPサポートを調べる必要があります。

于 2009-05-02T16:42:39.117 に答える