Пишу клиент сырого сокета (который успешно отправляет UDP пакеты) и серверный сокет, Проблема в серверной части.
Я создаю сокет следующим образом:
int raw_socket = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
также я пробовал это с IPPROTO_RAW, но получил тот же результат, и я привязываю его:
bind(raw_socket, (struct sockaddr*)&sockstr, sizeof(sockstr))
при попытке получить некоторые пакеты с помощью сокета единственная полезная нагрузка, которую я получаю, это «E» (я думаю, что это означает «Ошибка»), или сокет продолжает прослушивание, но блокируется, и ничего не происходит. Как получить пакет UDP, используя необработанный сокет? Мой код:
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <netinet/in.h>
#include <string.h>
int server(){
int raw_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if (raw_socket== -1){
perror("Socket_creation_error\n");
return 1;
}
struct sockaddr_in sockstr;
sockstr.sin_addr.s_addr = inet_addr("127.0.0.1");
sockstr.sin_family = AF_INET;
sockstr.sin_port = htons(9090);
socklen_t s = (socklen_t)sizeof(sockstr);
if (bind(raw_socket, (struct sockaddr*)&sockstr, sizeof(sockstr))< 0){
perror("binding_err\n");
return 0;
}
char* msg[256];
memset(msg, 0, 256);
recv(raw_socket, msg, sizeof(msg), 0);
printf(msg);
return 0;
}
void main(){
server();
}