如何在C中使用未连接的套接字udp将数据发送到ipv4和ipv6 google接口?

如何在C中使用未连接的套接字udp将数据发送到ipv4和ipv6 google接口?,c,sockets,udp,getaddrinfo,sendto,C,Sockets,Udp,Getaddrinfo,Sendto,我正在尝试向主机www.google.fr发送一些随机数据报到ipv4和ipv6接口,这对ipv4很好,但对ipv6不起作用。我想通过UDP协议使用一个未连接的套接字 我使用getaddrinfo和sendto函数做了一些事情,但当我在ipv6接口上调用sendto时,它失败并打印“网络不可访问” intmain(){ int s=插座(AF_INET6,插座DGRAM,0); 煤焦试验[4]; 结构addrinfo提示={0}; hits.ai_family=AF_INET6; hits.ai

我正在尝试向主机www.google.fr发送一些随机数据报到ipv4和ipv6接口,这对ipv4很好,但对ipv6不起作用。我想通过UDP协议使用一个未连接的套接字

我使用getaddrinfo和sendto函数做了一些事情,但当我在ipv6接口上调用sendto时,它失败并打印“网络不可访问”

intmain(){
int s=插座(AF_INET6,插座DGRAM,0);
煤焦试验[4];
结构addrinfo提示={0};
hits.ai_family=AF_INET6;
hits.ai_socktype=SOCK_DGRAM;
hits.ai_协议=0;
hits.ai_flags=ai_V4MAPPED | ai_ALL;
结构addrinfo*res={0};
结构addrinfo*列表;
int exit_status=getaddrinfo(“www.google.fr”、“8080”、“提示”和res);
如果(退出状态!=0){
佩罗尔(“getaddrinfo:”);
返回退出失败;
}
for(list=res;list!=NULL;list=list->ai_next){
如果(列表->ai_族==AF_INET6){
printf(“AF_INET6\n”);
int rc=sendto(s,test,4,MSG_MORE,list->ai_addr,sizeof(*list->ai_addr));
if(rc<0){
佩罗尔(“问题…”);
}
}
}
返回退出成功;
}

我希望没有佩里或打印,但我得到的网络是不可检查的。我想知道为什么有些人对此一无所知?

一个明显的问题是,在
sendto
调用中,没有为地址长度传递足够的字节。
ai_addr
字段是一个
struct sockaddr*
,但
struct sockaddr
只是一个头结构,实际地址结构将分配更大的结构


使用
list->ai_addrlen

这是因为,我在4g模式下没有ipv6连接,我们可以这样做

ip -6 route | grep default

要检查我们是否有ipv6连接

您是否正在尝试向移动设备发送UDP?我认为它的工作方式与此相同抱歉。。。谢谢你的帮助!我会看一些文档!你有这方面的文件吗?
ip -6 route | grep default