2011-09-14 31 views
12
struct sockaddr { 
    unsigned short sa_family; // address family, AF_xxx 
    char   sa_data[14]; // 14 bytes of protocol address 
}; 

In questa struttura qual è esattamente il significato di "famiglia di indirizzi" raffigurato da "sa_family"?Capire struct sockaddr

Vuol dire che protocolli come TCP/UDP hanno "indirizzi"? Bene, i protocolli possono essere numeri di identificazione e non indirizzi, credo.

In ogni caso, se sì, allora su quali basi sono state divise le loro famiglie?

risposta

18

Il formato e le dimensioni del l'indirizzo è di solito protocollo specifico.

sockaddr viene utilizzato come base di un set di strutture di indirizzi che si comportano come un'unione discriminata, vedere http://www.retran.com/beej/sockaddr_inman.html. Generalmente si guarda allo sa_family e quindi si esegue il cast alla struttura di indirizzo specifico della famiglia di indirizzi appropriata.

TCP e UDP non hanno indirizzi specifici a loro in quanto tale, piuttosto livello IP ha diverse dimensioni di indirizzo per IPv4 e IPv6.

Consulta anche:

+0

Grazie, ma allora perché in questo formato indirizzo caso è * fissi * 14 'sa_data [14]'? –

+0

e inoltre, se la dimensione dipende dal tipo di protocollo, allora cosa deve essere impostato lì come caso generale se il protocollo può essere deciso in fase di esecuzione? –

+1

Vedere http://msdn.microsoft.com/en-us/library/ff570822%28v=vs.85%29.aspx. Afferma che la struttura sockaddr è abbastanza grande da contenere un indirizzo di trasporto per la maggior parte delle famiglie di indirizzi. Quindi è 14 byte per renderlo abbastanza grande. –

0

Ho trovato questo quando si cerca di riprodurre il metodo jnetpcap getHardwareAddress() in C/C++. L'indirizzo MAC è contenuto quando sa_family è 17 (0x11, AF_PACKET), in byte 10-15.