sockaddr_in6 не объявлен? - PullRequest
       16

sockaddr_in6 не объявлен?

3 голосов
/ 10 августа 2010

Я пытаюсь портировать сервер / клиент ipv4 на ipv6, но компилятор говорит, что SOCKADDR_IN6 не объявлено в области.SOCKADDR_IN объявлено, но не SOCKADDR_IN6.<Winsock2.h> включено.

У кого-нибудь есть идеи, почему оно не было объявлено?

Ответы [ 3 ]

8 голосов
/ 10 августа 2010

Документация Microsoft для sockaddr_in6 гласит, что она определена в заголовке ws2tcpip.h, возможно, вам нужно это включить.

В Linux вам понадобятся разные версии, sys/socket.h и netinet/in.h.

1 голос
/ 06 февраля 2013

В настоящее время я нашел SOCKADDR_IN6 определение в заголовке ws2ipdef.h (Visual Studio 2008).Однако, как сказано в комментарии ниже, MS Docs утверждает, что этот заголовок никогда не должен использоваться напрямую (используйте Ws2tcpip.h вместо).

0 голосов
/ 10 августа 2010

С MSDN :

struct in_addr6 {
    u_char    s6_addr[16];             /* IPv6 address */
};

struct sockaddr_in6 {
    short             sin6_family;     /* AF_INET6 */
    u_short           sin6_port;       /* Transport level port number */
    u_long            sin6_flowinfo;   /* IPv6 flow information */
    struct in_addr6   sin6_addr;       /* IPv6 address */
    u_long            sin6_scope_id;   /* set of interfaces for a scope */
   };  

Из вашего вопроса я вижу, что:

SOCKADDR_IN6 != sockaddr_in6

Путаница в нижнем и верхнем регистре?
Вы также не можетеЕсли у вас установлена ​​последняя версия winsock, я не уверен, насколько далеко назад была введена поддержка IPV6, вы можете проверить, является ли это вашей проблемой.

...