мне нужно принимать входящие пакеты 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. Я уже пытался увеличить размер буфера приема, но не успел.