ошибка c connect () — недопустимый аргумент

#c #sockets #connect

#c #сокеты #Контакты

Вопрос:

Я пишу простой UDP-клиент, и ошибка возвращается как «недопустимый аргумент», но я не знаю, что не так. Он скомпилирован в Linux. Мой код выглядит следующим образом.

 int udp_fd = -1;
struct sockaddr_in addr;
int port = 1701;

udp_fd = socket(AF_PPPOX, SOCK_DGRAM, 0);
if (udp_fd < 0) {
    printf("fail to get UDP socketn");
    return 0;
}

memset((char *) amp;addr, 0, sizeof(struct sockaddr_in));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("31.25.210.118");
addr.sin_port = htons(port);

if(connect(udp_fd, (struct sockaddr *)amp;addr, sizeof(addr)) < 0 ) {
    printf("UDP connect failed, errno = %sn", strerror(errno));
    return 0;
}
  

Комментарии:

1. Он скомпилирован в Linux, я не знаю, ошибка времени или нет. Как мне проверить?

2. Компилятор что-нибудь говорит? Какой компилятор вы используете? Не могли бы вы вставить результат gcc -Wall yourclient.c ?

3. Я только что попробовал этот код, это ошибка времени выполнения, connect () не удался «потому что» тип сокета — AF_PPPOX . Я пробовал с AF_INET, он работает нормально. Я думаю, что сокеты AF_PPOX должны обрабатываться по-разному.

Ответ №1:

Вы используете AF_INET адрес с AF_PPPoX сокетом. Это смешивание яблок и попугаев.

PPP означает «точка-точка», в этом домене нет такого понятия, как IP-адрес. Выберите свою игру. Вы либо подключаетесь через Интернет и используете socket(AF_INET, ... , либо подключаетесь через PPP и используете один из протоколов PPP, например PX_PROTO_OLAC , или PX_PROTO_OPNS , и соответствующий тип адреса сокета ( sockaddr_pppolac или sockaddr_pppopns ) вместо sockaddr_in .