Ho questa semplice coppia di applicazioni client-server. Il codice è piuttosto semplice, sto usando solo metodi nuovi, consigliati come getaddinfo etc e tutto funziona perfettamente per ipv4. Anche per ipv6 loopback (:: 1) funziona. I problemi iniziano quando si tratta di altri indirizzi IPv6 ... Ho due macchine in una rete, tutto funziona bene quando passo i loro indirizzi IPv4, ma quando do l'indirizzo IPv6 del mio client, ottengo un errore sulla funzione connect: argomento non valido . Ehi, non lo so già? Lo voglio! Quando cerco di ping6 questo indirizzo IPv6, ottengo lo stesso errore:connect() restituisce "argomento non valido" con indirizzo ipv6
connect: Invalid argument
Ma c'è un modo per superare questo blocco - si dovrebbe scegliere un'interfaccia con un interruttore -I e tutto fila liscio dal poi. Ma come posso ottenere lo stesso risultato nella mia app client? Cosa dovrei fare? Il mio codice cliente si presenta così:
struct addrinfo hints;
struct addrinfo *server;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
int status;
if((status = getaddrinfo(argv[1], argv[2], &hints, &server) != 0))
{
perror("getaddrinfo error");
return 1;
}
int sock_fd;
struct addrinfo *ptr;
for(ptr=server;ptr!=NULL;ptr=ptr->ai_next)
{
if((sock_fd = socket(ptr->ai_family,ptr->ai_socktype,ptr->ai_protocol)) == -1)
{
perror("socket error");
continue;
}
if(connect(sock_fd, ptr->ai_addr,ptr->ai_addrlen) == -1)
{
perror("connect error");
continue;
}
break;
}
Qual è l'indirizzo problematico che il ping respinge? – Ariel
Sto pingando l'altra macchina nella mia rete ma funziona allo stesso modo per tutti gli indirizzi IPv6 - verifica questo: http://lists.debian.org/debian-ipv6/2005/06/msg00044.html – flyjohny
@flyjohny forse tu dovresti controllare i tuoi percorsi per vedere se il percorso predefinito è un ip6 route command: "route -A inet6" –