Zugeordneter Port: 2143
Ein IPv4-Client kann z.B. mit v4_tcpclient pchegering2 2143 test die Nachricht test an den Server schicken. Der Client gibt den mit gethostbyaddr() ermittelten offiziellen Namen des angegebenen Rechners aus:
offizieller Name: pchegering2.nm.informatik.uni-muenchen.de,\ IP-Adresse: 129.187.214.42
Der Server gibt die Nachricht und ihre Quelle aus:
Verbindungswunsch von Host pchegering2.nm.informatik.uni-muenchen.de\ (129.187.214.42), Port 2727 Mitteilung: test Beende Verbindung
Da kein Rechnername gleichzeitig mit einer IPv6- und einer IPv4-Adresse im DNS eingetragen ist, wurde zu Testzwecken in /etc/hosts dieser Eintrag vorgenommen:
5f04:fb00:81bb:d600:d6:800:98b:a8d8 pc2 129.187.214.42 pc2
Die Namensauflösung der C-Bibliothek Version 5 kommt mit der IPv6-Adresse von pc2 erwartungsgemäß nicht zurecht:
$ v4_tcpclient pc2 2143 test offizieller Name: pc2, IP-Adresse: 255.255.255.255 connect: Network is unreachable
Die neuen Funktionen im protokollunabhängigen v6v4_tcpclient dagegen schon. Dieser versucht zuerst, den Server über IPv6 zu erreichen, nachdem dies scheitert, gelingt es ihm über IPv4:
$ v6v4_tcpclient pc2 2143 test Record 0: ai_flags: 2(2) ai_family: inet6(10) ai_socktype: stream(1) ai_protocol: 6(6) ai_addrlen: 18(24) ai_canonname: pc2 ai_addr: pc2.2143(5f04:fb00:81bb:d600:d6:800:98b:a8d8.2143) Trying pc2.2143(5f04:fb00:81bb:d600:d6:800:98b:a8d8.2143) connect: Connection refused(111) Record 1: ai_flags: 2(2) ai_family: inet(2) ai_socktype: stream(1) ai_protocol: 6(6) ai_addrlen: 10(16) ai_canonname: pc2 ai_addr: pchegering2.nm.informatik.uni-muenchen.de.2143\ (129.187.214.42.2143) Trying pchegering2.nm.informatik.uni-muenchen.de.2143\ (129.187.214.42.2143)
Die Funktionen gethostbyname2() und gethostbyaddr() der verwendeten Resolver-Bibliotheken sind offenbar fehlerhaft. Der v6_tcpclient meldet entweder gethostbyaddr: Unknown host oder wird vom Betriebssystem mit einem Segmentation fault beendet. Der v6_tcpserver meldet bei einer Verbindungsaufnahme mit dem protokollunabhängigen Client gethostbyaddr: Unknown error.
Die protokollunabhängigen Beispiele funktionieren als Server und Client korrekt. Startet man den v6v4_tcpserver unter einem IPv6-fähigen Betriebssystem, beantwortet er sowohl IPv6- als auch IPv4-Verbindungswünsche. Unterstützt das Betriebssystem IPv6 nicht, funktioniert der Server trotzdem, kann aber nur IPv4-Verbindungswünsche entgegennehmen.
Hier erreicht den Server eine von v4_tcpclient abgesandte Nachricht über IPv4 unter einem IPv6-fähigen Betriebssystem:
su_ai_addr: pchegering2.nm.informatik.uni-muenchen.de.3682\ (::ffff:129.187.214.42.3682) Verbindung von pchegering2.nm.informatik.uni-muenchen.de.3682\ (::ffff:129.187.214.42.3682) Mitteilung: test Beende VerbindungDie IPv4-Adresse von pchegering2 wird als IPv4-kompatible IPv6-Adresse ausgegeben.
Hier erreicht den Server eine von v6v4_tcpclient abgesandte Nachricht über IPv6:
su_ai_addr: ipv6-localhost.3936(::1.3936) Verbindung von ipv6-localhost.3936(::1.3936) Mitteilung: test Beende Verbindung