Я использую необработанные сокеты для отправки и получения пакетов данных Ethernet в C, используя recvFrom(). Я хочу читать в неблокирующем режиме, поэтому я использую MSG_DONTWAIT. Но recvFrom() всегда возвращает -1, даже если пакет получен или нет. Я новичок в программировании на C. Я могу получить свою полезную нагрузку, но всегда получаю сообщение «Получить ресурс временно недоступен».
Фрагмент кода:
if ((sock = socket(AF_PACKET, SOCK_RAW, htons(0x8851))) < 0) {
perror("ERROR: Socket");
exit(1);
}
while(1) {
int flag=0;
n=recvfrom(sock, buffer, 2048, MSG_DONTWAIT, NULL, NULL);
if (n == -1) {
perror("ERROR: Recvfrom");
close(sock);
flag=1;
}
if (flag==0) {
// Read Packet
}
}