BSD sockets - Konverze adresových formátů

Z IPv6.cz
Přejít na: navigace, hledání

Při práci s adresami IPv4 i IPv6 velmi často potřebujeme převést jejich čitelnou textovou reprezentaci (např. 1.2.3.4 nebo fe80::1234) do číselné binární formy anebo naopak. Tomuto účelu slouží následující dvě funkce:

int inet_pton(int af, const char *src, void *dst);

const char *inet_ntop(int af, const void *src,
                      char *dst, socklen_t size);

Funkce inet_pton převádí textovou reprezentaci adresy na binární a inet_ntop binární na textovou. Binární reprezentace je vždy v síťovém pořadí bajtů (NBO).

Argument af specifikuje adresovou rodinu (AF_INET nebo AF_INET6) a argumenty src a dst oběma funkcím předávají ukazatele na buffery, v nichž je uložena vstupní hodnota (src), resp. do nichž se má zapsat zkonvertovaný výsledek (dst). Konečně argument size u druhé funkce udává ještě délku bufferu pro výsledek - ta by měla být dostatečná pro to, aby do ní bylo možno zapsat úplnou textovou reprezentaci příslušné adresy IPv4 nebo IPv6.

Funkce inet_pton vrací 1 v případě úspěchu konverze, 0 v případě špatného vstupu a -1, pokud udaná adresová rodina není známa. Funkce inet_ntop naproti tomu v případě úspěchu vrací ukazatel na buffer, v němž je uložen výsledek a nulový ukazatel v případě neúspěchu.