【发布时间】:2019-04-23 16:37:56
【问题描述】:
我正在尝试向主机 www.google.fr 发送一些随机数据报到 ipv4 和 ipv6 接口,这对 ipv4 工作正常,但不适用于 ipv6。我想通过 UDP 协议使用单个未连接的套接字来实现。
我使用 getaddrinfo 和 sendto 函数做了一些事情,但是当我在 ipv6 接口上调用 sendto 时,它失败并打印“网络无法访问”。
int main() {
int s = socket(AF_INET6, SOCK_DGRAM, 0);
char test[4];
struct addrinfo hints = {0};
hints.ai_family = AF_INET6;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_protocol = 0;
hints.ai_flags = AI_V4MAPPED|AI_ALL;
struct addrinfo* res = {0};
struct addrinfo* list;
int exit_status = getaddrinfo("www.google.fr","8080", &hints, &res);
if (exit_status != 0){
perror("getaddrinfo:");
return EXIT_FAILURE;
}
for (list = res; list != NULL; list = list->ai_next) {
if (list->ai_family == AF_INET6) {
printf("AF_INET6\n");
int rc = sendto(s, test, 4, MSG_MORE, list->ai_addr, sizeof(*list->ai_addr));
if (rc < 0) {
perror("PROBLEME ... ");
}
}
}
return EXIT_SUCCESS;
}
我预计不会出现错误打印,但我得到网络无法访问。我想知道为什么这对任何人都不起作用?
【问题讨论】:
标签: c sockets udp getaddrinfo sendto