В настоящее время я учусь использовать необработанные сокеты Windows.
Я создал необработанный кадр ответа arp (включает все заголовки (ethernet + arp заголовки)), и когда я отправляю его с помощью функции sendto, онзавершается с ошибкой и возвращает SOCKET_ERROR с кодом ошибки 10047.
Параметры, которые я использовал для создания сокета, были следующими:
socket s = socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
, а также я изменил параметры сокета следующим образом:
int on=1;
setsockopt(s,IPPROTO_IP, 2,(char*)&on,sizeof(on));
(Кстати, '2' равно IP_HDRINCL, почему-то Visual Studio его не распознала ..)
Я пытаюсь отправить пакет следующим образом:
socketaddr sa = { 0 };
int SentBytesCount = sendto(s, (char*)&arp_raw_msg,sizeof(Arp_Frame),0,&sa,sizeof(sa));
Где Arp_Frame - это структура, которая включает заголовок ethernet + заголовок arp + 18 байт для заполнения.
После этого вызова я получаю, что SentBytesCount равно SOCKET_ERROR (-1), и пакет не являетсяотправлено.
Спасибо за помощь!