ошибка getaddrinfo: ai_socktype не поддерживается

#c #sockets #network-programming #getaddrinfo

#c #сокеты #сетевое программирование #getaddrinfo

Вопрос:

 struct addrinfo *myAddrinfo, *curMyAddrinfo, hint;
memset(amp;hint, 0, sizeof(struct addrinfo));
hint.ai_family = AF_INET;
hint.ai_protocol = AI_PASSIVE;
hint.ai_socktype = SOCK_STREAM;

const int code = getaddrinfo(NULL, SERVER_PORT, amp;hint, amp;myAddrinfo);
if ((code) != 0) {
    printf("getaddrinfo error occours: %s ",
            gai_strerror(code));
    return 1;
}
  

это выдает ошибку: «ai_socktype не поддерживается»
если я закомментирую hint.ai_protocol = AI_PASSIVE; , это пройдет, но мне интересно, почему это происходит?

спасибо за ваше время

Ответ №1:

Это стоит просто добавить здесь, поскольку это лучший результат при поиске «ai_socktype не поддерживается» альтернативной причиной этого может быть то, что hints не обнуляется в стеке; для этого вам нужно

 memset(amp;hints, 0, sizeof hints);
  

В коде Nissan, конечно, это уже было

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

1. Что означает это предложение Nissan's code of course did have that already ?

Ответ №2:

Это потому, что AI_PASSIVE ссылается на поле ai_flags (не ai_protocol). Попробуйте :

 hint.ai_flags = AI_PASSIVE;
  

И взгляните на структуру addrinfo.