我想將ipv4服務器/客戶端移植到ipv6,但編譯器說SOCKADDR_IN6
未在範圍內聲明。 SOCKADDR_IN
已聲明,但不是SOCKADDR_IN6
。包括<Winsock2.h>
。sockaddr_in6未聲明?
任何人有任何想法,爲什麼它會被宣佈?
我想將ipv4服務器/客戶端移植到ipv6,但編譯器說SOCKADDR_IN6
未在範圍內聲明。 SOCKADDR_IN
已聲明,但不是SOCKADDR_IN6
。包括<Winsock2.h>
。sockaddr_in6未聲明?
任何人有任何想法,爲什麼它會被宣佈?
微軟的documentation for sockaddr_in6
表示它在ws2tcpip.h
標題中定義,可能你需要包含它。
在Linux上,您需要不同的包括sys/socket.h
和netinet/in.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的支持有多遠,您可能想檢查一下是否有問題。
我目前找到SOCKADDR_IN6
定義在ws2ipdef.h
標題(Visual Studio 2008)中。但是,正如下面的評論中所述,MS Docs指出,不應該直接使用此標頭(使用Ws2tcpip.h
代替)。
[MS文檔](https://msdn.microsoft.com/en-us/library/windows/ desktop/ms740496(v = vs.85).aspx)明確聲明應該使用ws2tcpip.h,並且「Ws2def.h和Ws2ipdef.h頭文件不應該直接使用」。 – 2016-10-11 02:40:37
我沒有說應該直接使用ws2ipdef.h,我只是指出了我找到SOCKADDR_IN6定義的位置。 – Alexandre 2016-10-11 18:18:06
不知道你使用的是什麼樣的操作系統頭文件。 – 2010-08-09 20:23:42