私はすべてのトラフィックを読み込むためにRAWソケットを作成するプログラムを作っています。 socket()とrecvfrom()の呼び出しの間に(最後のものはバッファからすべてのパケットを取り出すループにあります)私は5秒待ちます。なぜSO_RCVBUFの値を変更できないのですか?
私はプログラムを実行すると、高速モードでは(バッファをすばやく書き込むために)hping3コマンドを使って約200パケットをプログラムに送信します。 5秒が経過すると、私のプログラムはバッファから約150パケットを抽出します。 〜何も、私はまだ入手変化しないようで、しかし
int a = 65535;
if ((setsockopt(sockfd, 0, SO_RCVBUF, &a ,sizeof(int))) < 0)
{
fprintf(stderr, "Error setting sock opts..\n");
}
、«»、1または10000000の値が何であれ:
は、私はより良い結果を得るために、受信バッファのサイズを変更してみてくださいバッファから150パケット。
問題が何ですか?
編集:«a»の値はgetsockopt
の呼び出しで確認されます。 setsockopt
へ
'socket()'などの関連する呼び出しを含め、もっとコードを表示できますか?ご使用のオペレーティングシステムがわかっているかもしれません。 –
もちろん、私はこのプログラムをLinux 3.2 64ビットで実行しています。 'socket()'の呼び出し: 'sockfd = socket(AF_INET、SOCK_RAW、IPPROTO_TCP)' – Flow