2015-08-16 9 views
3

мне нужно принимать входящие пакеты UDP с помощью сокетов, который открываемые с помощью этого фрагмента кода:Почему PF_PACKET RAW-сокет останавливает отсутствующие пакеты после запуска «Wireshark»?

static int fd; 
char *iface; 


iface = "eth0"; 

if ((fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP))) < 0) 
{ 
    perror("socket"); 
} 

if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, iface, strlen(iface)) < 0) 
{ 
    perror("bind"); 
    exit(EXIT_FAILURE); 
} 

я посылаю, скажем, 100 идентичных пакетов и попытаться получить и сосчитать их. Я использую recv (...) для этого. Только 93 пакета доставляются, а затем recv (...) зависает в ожидании следующих. Но если я запустил «Wireshark» (который использует libpcap) на компьютере принимающей стороны и заставил его прослушивать «eth0» для UDP-пакетов, тогда мое приложение всегда будет захватывать 100 пакетов без каких-либо проблем.

Я не могу понять, что я на самом деле делаю неправильно, и почему «Wireshark» влияет на мой приемник?

P.S. Я уже пытался увеличить размер буфера приема, но не успел.

ответ

1

Используйте libpcap вместо того, чтобы изобретать колесо.

 Смежные вопросы

  • Нет связанных вопросов^_^