#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.