Ich arbeite an der Migration von Code von IPv4 nur zu IPv6, und natürlich muss ich die Abwärtskompatibilität für IPv4 beibehalten.Funktionieren IPv6-Adressen im IPv4-Modus?
Ich habe einige Dokumente und Anleitungen zur Konvertierung meines Codes gelesen und habe gesehen, dass die Verwendung vieler der neueren APIs (wie inet_pton() anstelle von inet_addr()) sowohl in IPv4 als auch in IPv6 funktioniert.
In einigen Fällen ist es jedoch immer noch nicht klar, wann ich Code schreiben muss, um jedes Protokoll anders zu behandeln. Insbesondere weiß ich nicht, ob eine IPv6-Adresse (Familie AF_INET6 mit sockaddr_storage-Struktur) in einem lokalen Netzwerk funktionieren wird.
Also sagen wir zum Beispiel, dass ich eine solche Adresse mit der eingebauten Konstante in6addr_loopback erzeuge, und dann versuche ich, diese für einen Parameter zu einem bind() -Aufruf zu verwenden.
Funktioniert das sowohl in IPv4 als auch in IPv6, oder muss ich für jeden Fall den richtigen Adresstyp (AF_INET vs AF_INET6) erstellen? Ist es wichtig, ob ich eine Verbindung zu einem lokalen Socket (d. H. Dem Loopback wie in diesem Fall) herstelle, im Gegensatz zu einem Socket auf einem externen Gerät?
Mein Client-Code läuft auf iPhone/iPad-Hardware, falls es darauf ankommt.
Ich weiß, wie Sie beide Socket-Typen erstellen, aber meine Frage ist, dass ich immer einen IPv6-Typ für alle Szenarien erstellen. Funktioniert das für alle Netzwerktypen, einschließlich eines Nur-IPv4-Netzwerks? – Locksleyu
Nein, Sie müssten beide Protokolle unterstützen, es sei denn, Ihr ipv6-Host führt ipv4-Tunneling für IPv4-Verbindungen durch. – Pramod
Aber woher weiß ich, welches Protokoll zu verwenden ist? Um die Dinge einfach zu halten, nehmen wir an, dass ich nur Verbindungen zu einem lokalen Host-Server herstelle. – Locksleyu