[Avanti]  [Indietro]  [Su]  

14.3.2 La struttura degli indirizzi IPv4

I socket di tipo PF_INET vengono usati per la comunicazione attraverso internet; la struttura per gli indirizzi per un socket internet (se si usa IPv4) è definita come sockaddr_in nell'header file netinet/in.h ed ha la forma mostrata in fig. 14.2, conforme allo standard POSIX.1g.


1: struct sockaddr_in { 
2:     sa_family_t     sin_family; /* address family: AF_INET */ 
3:     in_port_t       sin_port;   /* port in network byte order */ 
4:     struct in_addr  sin_addr;   /* internet address */ 
5: }; 
6: /* Internet address. */ 
7: struct in_addr { 
8:     in_addr_t       s_addr;     /* address in network byte order */ 
9: }; 
Figura 14.2: La struttura degli indirizzi dei socket internet (IPv4) sockaddr_in.

L'indirizzo di un socket internet (secondo IPv4) comprende l'indirizzo internet di un'interfaccia più un numero di porta (affronteremo in dettaglio il significato di questi numeri in sez. 15.1.6). Il protocollo IP non prevede numeri di porta, che sono utilizzati solo dai protocolli di livello superiore come TCP e UDP. Questa struttura però viene usata anche per i socket RAW che accedono direttamente al livello di IP, nel qual caso il numero della porta viene impostato al numero di protocollo.

Il membro sin_family deve essere sempre impostato a AF_INET, altrimenti si avrà un errore di EINVAL; il membro sin_port specifica il numero di porta. I numeri di porta sotto il 1024 sono chiamati riservati in quanto utilizzati da servizi standard e soltanto processi con i privilegi di amministratore (con user-ID effettivo uguale a zero) o con la capability CAP_NET_BIND_SERVICE possono usare la funzione bind (che vedremo in sez. 15.2.1) su queste porte.

Il membro sin_addr contiene un indirizzo internet, e viene acceduto sia come struttura (un resto di una implementazione precedente in cui questa era una union usata per accedere alle diverse classi di indirizzi) che direttamente come intero. In netinet/in.h vengono definite anche alcune costanti che identificano alcuni indirizzi speciali, riportati in tab. 15.1, che reincontreremo più avanti.

Infine occorre sottolineare che sia gli indirizzi che i numeri di porta devono essere specificati in quello che viene chiamato network order, cioè con i bit ordinati in formato big endian, questo comporta la necessità di usare apposite funzioni di conversione per mantenere la portabilità del codice (vedi sez. 14.4 per i dettagli del problema e le relative soluzioni).


[Avanti]  [Indietro]  [Su]  
© 2000-2003 Simone Piccardi
Pubblicazione web curata da Mirko Maischberger