質問

ioctl(FIONREAD)を使用してLinuxのRawソケット受信バッファー内の保留中のオクテットの数を決定し、その上でrecvを呼び出す実装があります。

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

私は、高負荷で時々メッセージを失い、どこでそれを見つけられなかったのかを尋ねています。 Raw Socketで保留中のオクテットの数を把握するより良い方法です。

役に立ちましたか?

解決

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

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

パフォーマンスが重要な場合は、 PACKET_MMAP Linuxでのサポート。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top