我正在尝试将ipv4服务器/客户端移植到ipv6,但是编译器说SOCKADDR_IN6
未在范围内声明。 SOCKADDR_IN
已声明,但不是SOCKADDR_IN6
。 <Winsock2.h>
已包含在内。
任何人都有任何想法,为什么它不会被宣布?
答案 0 :(得分:8)
Microsoft的documentation for sockaddr_in6
表示它是在ws2tcpip.h
标题中定义的,可能您需要包含它。
在Linux上,您需要不同的包含,sys/socket.h
和netinet/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的支持程度是多少,您可能想检查这是否是您的问题。