【发布时间】:2011-03-27 12:12:51
【问题描述】:
我正在尝试将 ipv4 服务器/客户端移植到 ipv6,但编译器说 SOCKADDR_IN6 未在范围内声明。 SOCKADDR_IN 已声明,但未声明 SOCKADDR_IN6。包括<Winsock2.h>。
有人知道为什么不申报吗?
【问题讨论】:
-
在不知道您使用哪种操作系统标头的情况下无法猜测。
我正在尝试将 ipv4 服务器/客户端移植到 ipv6,但编译器说 SOCKADDR_IN6 未在范围内声明。 SOCKADDR_IN 已声明,但未声明 SOCKADDR_IN6。包括<Winsock2.h>。
有人知道为什么不申报吗?
【问题讨论】:
Microsoft 的 documentation for sockaddr_in6 说它是在 ws2tcpip.h 标头中定义的,可能您需要包含它。
在 Linux 上,您需要不同的包含,sys/socket.h 和 netinet/in.h。
【讨论】:
winsock 标签...我编辑了我的Windows 答案,还修复了您问题中<winsock2.h> 的格式。
来自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的支持有多早,你可能想检查一下是否是你的问题。
【讨论】: