Ich habe dieses einfache Client-Server-Anwendungspaar. Der Code ist ziemlich einfach, ich benutze nur neue, empfohlene Methoden wie getaddinfo etc und alles funktioniert gut für ipv4. Sogar für ipv6 loopback (:: 1) funktioniert es. Probleme beginnen, wenn es zu einigen anderen IPv6-Adressen kommt ... Ich habe zwei Maschinen in einem Netzwerk, alles funktioniert gut, wenn ich ihre IPV4-Adressen, aber wenn ich meine Client IPv6-Adresse gebe, bekomme ich einen Fehler bei der Verbindungsfunktion: ungültiges Argument . Hey, weiß ich das nicht schon? Ich mache! Als ich nach ping6 diese IPv6-Adresse versuchen, erhalte ich den gleichen Fehler:connect() gibt "ungültiges Argument" mit IPv6-Adresse zurück
connect: Invalid argument
Aber es gibt einen Weg, um diesen Block zu überwinden - man sollte eine Schnittstelle mit einem -I Schalter wählen und alles reibungslos läuft seit dann. Aber wie kann ich das Gleiche in meiner Client-App erreichen? Was soll ich machen? Mein Client-Code sieht wie folgt aus:
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;
}
Was ist diese problematische Adresse, die Ping ablehnt? – Ariel
Ich ping die andere Maschine in meinem Netzwerk, aber es funktioniert das gleiche für alle IPv6-Adressen - überprüfen Sie dies: http://lists.debian.org/debian-ipv6/2005/06/msg00044.html – flyjohny
@flyjohny vielleicht Sie sollte überprüfen Sie Ihre Routen zu sehen, ob die Standard-Route ist ein ip6 route-Befehl: "route -A inet6" –