Tüm trafiği okumak için bir RAW yuvası oluşturan bir program yapıyorum. Soket() ve recvfrom() çağrısı arasında (sonuncusu tüm paketleri tampondan çıkarmak için bir döngüdür) 5s bekliyorum.SO_RCVBUF değeri neden değiştirilmiyor?
Programı çalıştırdığım zaman, programa "hızlı modda" (tamponda hızlıca doldurmak için) hping3 komutuyla yaklaşık 200 paket gönderiyorum. 5s geçtikten sonra, programım tampondan yaklaşık 150 paket çıkarır. ~ Hiçbir şey, hala olsun değiştirir gibi görünüyor, ancak
int a = 65535;
if ((setsockopt(sockfd, 0, SO_RCVBUF, &a ,sizeof(int))) < 0)
{
fprintf(stderr, "Error setting sock opts..\n");
}
, «a», 1 veya 10000000 değeri ne olursa olsun:
daha iyi sonuç almak için alma tampon boyutunu değiştirmek için denemek Tampondan 150 paket.
Sorun nedir?
Düzenleme: «a» değeri, bir getsockopt
çağrısı ile doğrulanır.
Bize 'socket() 'vb ilgili aramalar dahil olmak üzere daha fazla kod gösterebilir misiniz? İşletim sisteminizi bilmemize izin vermek de yardımcı olabilir. –
Elbette, bu programı Linux 3.2 64 bitleri altında çalıştırıyorum. Socket() ':' sockfd = socket (AF_INET, SOCK_RAW, IPPROTO_TCP) ' – Flow