我试着将一个ipv4服务器/客户端移植到ipv6,但编译器报错说SOCKADDR_IN6
不在范围内声明。已经声明了SOCKADDR_IN
,但没有SOCKADDR_IN6
。已经包含了<Winsock2.h>
头文件。
有人知道为什么它会被未声明吗?
微软的 sockaddr_in6
文档 表明它是在 ws2tcpip.h
头文件中定义的,很可能需要包含该头文件。
在 Linux 上,您需要不同的头文件,即 sys/socket.h
和 netinet/in.h
。
winsock
标签... 我已经为Windows编辑了我的答案,并修复了你问题中的<winsock2.h>
格式。 - sth来自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到哪个版本开始,您可能需要检查一下是否是这个问题。