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).