IPv6 sockety a kompatibilita s IPv4

Programování v UNIXu. Cvičení probíhá v laboratoři UNIX a poskytuje posluchačům průpravu v programování v jazyce C v prostředí UNIX.
marxin
Matfyz(ák|ačka) level I
Příspěvky: 45
Registrován: 30. 1. 2008 13:24
Typ studia: Informatika Mgr.

IPv6 sockety a kompatibilita s IPv4

Příspěvek od marxin »

Ahoj,
v průběhu práce na zápočtovém programu jsem narazil na problém přenositelnosti socketu na IPv6, kde vznikla nové struktura sockaddr_in6 a vzniklo jakési zapouzdření sockaddr_storage, které má v sobě uchovávat obě struktury.

Chtěl jsem se optat, jak se nechá nejlépe udělat poslouchání socketu na jak IPv4, tak IPv6, nebyl jsem schopen vygooglit nějaký schopný příklad a ve slidech také není mnoho.

Díky,
Martin
Uživatelský avatar
Andrej
Matfyz(ák|ačka) level I
Příspěvky: 47
Registrován: 15. 9. 2006 17:08
Typ studia: Informatika Mgr.
Bydliště: Zlín
Kontaktovat uživatele:

Re: IPv6 sockety a kompatibilita s IPv4

Příspěvek od Andrej »

getaddrinfo(), AI_V4MAPPED a je to. (Detaily jsou v manuálové stránce.) Pak pro IPv4 i IPv6 stačí pouze IPv6 struktury adres.
petrbel

Re: IPv6 sockety a kompatibilita s IPv4

Příspěvek od petrbel »

můžeš mrknout na tenhle příklad http://mff.devnull.cz/pvu/src/resolving/getaddrinfo.c - socket() i bind() se volají v tom cyklu (je potřeba kontrolovat, jestli se bind() povedl a když ne, tak zavřít socket. Dále je potřeba kouknout po skončení cyklu, jestli jsme vůbec něco otevřeli).

Upozornění - tenhle příklad otevře jeden (libovolný) port na nějaké adrese (podle toho, co bude na daném systému volné). Nebude tedy možné přijímat ipv4 i ipv6 (na to je potřeba použít AF_INET6 a socketu nastavit přes setsockopt() aby bral i ipv4) - to ale není podle normy (ale všude to funguje)
Odpovědět

Zpět na „SWI015 Programování v Unixu“