Я пытаюсь отправить случайную дейтаграмму на хост www.google.fr на интерфейсы ipv4 и ipv6, это нормально работает для ipv4, но не для ipv6. Я хотел сделать это с одним неподключенным сокетом по протоколу UDP.
Я сделал что-то, используя getaddrinfo и функцию sendto, но когда я вызываю sendto на интерфейсах ipv6, он выходит из строя и выдает «сеть недоступна».
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;
}
Я ожидаю, что нет печати perror, но я получаю, что сеть недоступна. Я хотел бы знать, почему это не работает у кого-нибудь идеи?