sockaddr_in6没有申报?

时间:2010-08-09 20:19:39

标签: c++ winsock ipv6

我正在尝试将ipv4服务器/客户端移植到ipv6,但是编译器说SOCKADDR_IN6未在范围内声明。 SOCKADDR_IN已声明,但不是SOCKADDR_IN6<Winsock2.h>已包含在内。

任何人都有任何想法,为什么它不会被宣布?

3 个答案:

答案 0 :(得分:8)

Microsoft的documentation for sockaddr_in6表示它是在ws2tcpip.h标题中定义的,可能您需要包含它。

在Linux上,您需要不同的包含,sys/socket.hnetinet/in.h

答案 1 :(得分:1)

我目前在SOCKADDR_IN6标题中找到ws2ipdef.h定义(Visual Studio 2008)。但是,正如下面的评论中所述,MS Docs指出不应直接使用此标头(而是使用Ws2tcpip.h)。

答案 2 :(得分:0)

来自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的支持程度是多少,您可能想检查这是否是您的问题。