Provided by: manpages-ro-dev_4.21.0-2_all bug

NUME

       inet_pton - convertește adresele IPv4 și IPv6 din format text în format binar

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

REZUMAT

       #include <arpa/inet.h>

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

DESCRIERE

       Această funcție convertește șirul de caractere src într-o structură de adrese de rețea din
       familia de adrese af, apoi copiază structura de adrese de  rețea  în  dst.  Argumentul  af
       trebuie să fie fie AF_INET sau AF_INET6. dst este scris în ordinea octeților rețelei.

       În prezent, sunt acceptate următoarele familii de adrese:

       AF_INET
              src  indică  un  șir  de  caractere  care  conține o adresă de rețea IPv4 în format
              zecimal punctat, "ddd.ddd.ddd.ddd.ddd", unde ddd este un număr zecimal de  până  la
              trei  cifre  în  intervalul  0-255.  Adresa este convertită într-o structură struct
              in_addr și copiată în dst, care trebuie să aibă o lungime de sizeof(struct in_addr)
              (4) octeți (32 de biți).

       AF_INET6
              src  indică  un  șir de caractere care conține o adresă de rețea IPv6.  Adresa este
              convertită într-o structură struct in6_addr și copiată în dst, care trebuie să aibă
              o  lungime de sizeof(struct in6_addr) (16) octeți (128 de biți).  Formatele permise
              pentru adresele IPv6 respectă următoarele reguli:

              •  Formatul preferat este x:x:x:x:x:x:x:x. Acest format este format din opt  numere
                 hexazecimale,  fiecare  dintre  acestea  exprimând  o  valoare pe 16 biți (adică
                 fiecare x poate avea până la 4 cifre hexazecimale).

              •  O serie de valori zero contigue în formatul preferat poate  fi  prescurtată  ::.
                 Într-o  adresă  nu  poate apărea decât un singur element ::.  De exemplu, adresa
                 loopback 0:0:0:0:0:0:0:1 poate fi abreviată ca  ::1.   Adresa  „joker”,  formată
                 toată din zerouri, poate fi scrisă ca ::.

              •  Un  format  alternativ  este  util pentru exprimarea adreselor IPv4 transpuse în
                 adrese IPv6. Acest format se scrie ca x:x:x:x:x:x:d.d.d.d, unde cele șase x  din
                 față sunt valori hexazecimale care definesc cele mai semnificative șase părți de
                 16 biți ale adresei (adică 96 de biți), iar  d  exprimă  o  valoare  în  notație
                 zecimală  punctată  care  definește  cei  mai  puțin semnificativi 32 de biți ai
                 adresei.  Un exemplu de astfel de adresă este ::FFFF:204.152.189.116.

              A se vedea RFC 2373 pentru detalii  suplimentare  privind  reprezentarea  adreselor
              IPv6.

VALOAREA RETURNATĂ

       inet_pton()  returnează  1 în caz de succes (adresa de rețea a fost convertită cu succes).
       Se returnează 0 dacă src nu conține un șir de caractere care să  reprezinte  o  adresă  de
       rețea  validă  în  familia  de adrese specificată.  Dacă af nu conține o familie de adrese
       validă, se returnează -1, iar errno este configurată la EAFNOSUPPORT.

ATRIBUTE

       Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).

       ┌────────────────────────────────────────────────────┬───────────────────┬────────────────┐
       │InterfațăAtributValoare        │
       ├────────────────────────────────────────────────────┼───────────────────┼────────────────┤
       │inet_pton()                                         │ Siguranța firelor │ MT-Safe locale │
       └────────────────────────────────────────────────────┴───────────────────┴────────────────┘

STANDARDE

       POSIX.1-2001, POSIX.1-2008.

NOTE

       Spre deosebire de inet_aton(3) și inet_addr(3), inet_pton() acceptă  adrese  IPv6.  Pe  de
       altă parte, inet_pton() acceptă numai adrese IPv4 în notație zecimală punctată, în timp ce
       inet_aton(3) și inet_addr(3) acceptă notația mai generală numere  și  puncte  (formate  de
       numere  hexazecimale  și  octale  și formate care nu necesită scrierea explicită a tuturor
       celor patru octeți). Pentru o interfață care gestionează atât adrese IPv6, cât  și  adrese
       IPv4 în notație numere și puncte, a se vedea getaddrinfo(3).

ERORI

       AF_INET6  nu  recunoaște  adresele IPv4. În schimb, în src trebuie furnizată o adresă IPv4
       explicită, care să fie transpusă într-o adresă IPv6.

EXEMPLE

       Programul de mai jos demonstrează utilizarea  inet_pton()  și  inet_ntop(3).  Iată  câteva
       exemple de execuție:

           $ ./a.out i6 0:0:0:0:0:0:0:0
           ::
           $ ./a.out i6 1:0:0:0:0:0:0:8
           1::8
           $ ./a.out i6 0:0:0:0:0:FFFF:204.152.189.116
           ::ffff:204.152.189.116

   Sursa programului

       #include <arpa/inet.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>

       int
       main(int argc, char *argv[])
       {
           unsigned char buf[sizeof(struct in6_addr)];
           int domain, s;
           char str[INET6_ADDRSTRLEN];

           if (argc != 3) {
               fprintf(stderr, "Utilizare: %s {i4|i6|<num>} șir\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           domain = (strcmp(argv[1], "i4") == 0) ? AF_INET :
                    (strcmp(argv[1], "i6") == 0) ? AF_INET6 : atoi(argv[1]);

           s = inet_pton(domain, argv[2], buf);
           if (s <= 0) {
               if (s == 0)
                   fprintf(stderr, "Nu este în format de prezentare");
               else
                   perror("inet_pton");
               exit(EXIT_FAILURE);
           }

           if (inet_ntop(domain, buf, str, INET6_ADDRSTRLEN) == NULL) {
               perror("inet_ntop");
               exit(EXIT_FAILURE);
           }

           printf("%s\n", str);

           exit(EXIT_SUCCESS);
       }

CONSULTAȚI ȘI

       getaddrinfo(3), inet(3), inet_ntop(3)

TRADUCERE

       Traducerea  în  limba  română  a  acestui  manual  a  fost  creată  de Remus-Gabriel Chelu
       <remusgabriel.chelu@disroot.org>

       Această  traducere  este  documentație  gratuită;  citiți  Licența  publică  generală  GNU
       Versiunea  3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  sau  o  versiune  ulterioară cu
       privire la condiții privind drepturile de autor.  NU se asumă Nicio RESPONSABILITATE.

       Dacă găsiți erori în traducerea acestui  manual,  vă  rugăm  să  trimiteți  un  e-mail  la
       ⟨translation-team-ro@lists.sourceforge.net⟩.