Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C套接字双堆栈ss_系列始终为IPv6_C_Sockets_Networking - Fatal编程技术网

C套接字双堆栈ss_系列始终为IPv6

C套接字双堆栈ss_系列始终为IPv6,c,sockets,networking,C,Sockets,Networking,当使用accept()或getpeername()时,sockaddr\u存储器始终具有ss\u family=AF\u INET6: struct sockaddr_存储地址={0}; socklen_t sockaddrlen=sizeof(地址); int client=accept(sock,(结构sockaddr*)(&address),&sockaddrlen); 如果(客户端s6_单词[0]==0)和\ ((a)->s6_单词[1])==0和\ (((a)-->s6_字[2])==

当使用
accept()
getpeername()
时,
sockaddr\u存储器始终具有
ss\u family=AF\u INET6

struct sockaddr_存储地址={0};
socklen_t sockaddrlen=sizeof(地址);
int client=accept(sock,(结构sockaddr*)(&address),&sockaddrlen);
如果(客户端<0){
perror(“无法接受”);
退出(退出失败);
}
if(address.ss_family==AF_INET6){

std::cout双栈套接字是IPv6套接字,仅支持IPv4,因此其IP地址将始终为
AF\u INET6
地址。但是,对于IPv4连接,这些地址将为

混合双栈IPv6/IPv4实现识别一类特殊的地址,即IPv4映射的IPv6地址。这些地址通常使用标准IPv6格式的96位前缀写入,其余32位使用IPv4的惯用点十进制表示法写入

此组中的地址由80位前缀0组成,接下来的16位是1,剩余的最低有效32位包含IPv4地址。例如::ffff:192.0.2.128表示IPv4地址192.0.2.128。另一种格式称为“IPv4兼容IPv6地址”,is::192.0.2.128;但是,不推荐使用此方法

您需要明确地检测,例如,请参见:

#如果6中的ndef已映射
#在6中定义是地址映射(a)\
((((a)-->s6_单词[0]==0)和\
((a)->s6_单词[1])==0和\
(((a)-->s6_字[2])==0&\
(((a)-->s6_字[3])==0&\
(((a)-->s6_字[4])==0&\
((a)->s6_字[5])==0xFFFF)
#恩迪夫
结构sockaddr_存储地址={0};
socklen_t sockaddrlen=sizeof(地址);
int client=accept(sock,(结构sockaddr*)(&address),&sockaddrlen);
如果(客户端<0){
perror(“无法接受”);
退出(退出失败);
}
if(address.ss_family==AF_INET6){
结构sockaddr\u in6*addr=(结构sockaddr\u in6*)(&address);
如果(IN6_是_ADDR_V4MAPPED(&(ADDR->sin6_ADDR))){

STD::这是不是回答了你的问题?你需要更复杂的检测来查看IPv6地址是否是IPv4映射地址::FFFF:1.2.3.4,张贴的代码是C++,而不是C。请改正问题。tags@user3629249唯一的部分C++是CUT,插座部分是C,这就是我一直在使用谷歌。“C套接字问题”如果我谷歌“C++套接字问题”它显示的东西不相关,所以我认为C是正确的标签,所以其他人可以找到它。文件中的任何部分C++是C++编译器使用的结果。所有的都必须是C。这正是我需要的,谢谢!