Понимание структуры sockaddr - PullRequest
16 голосов
/ 14 сентября 2011
struct sockaddr {
    unsigned short sa_family;   // address family, AF_xxx
    char           sa_data[14]; // 14 bytes of protocol address
};

В этой структуре, что именно означает семейство адресов , обозначенное sa_family?

Означает ли это, что протоколы, такие как TCP / UDP, имеют "адреса"?Ну, я думаю, что протоколы могут быть идентификационными номерами, а не адресами.

В любом случае, если да, то на каком основании их семьи были разделены?

Ответы [ 2 ]

20 голосов
/ 14 сентября 2011

Формат и размер адреса обычно зависят от протокола.

sockaddr используется в качестве базы набора структур адресов, которые действуют как дискриминируемый союз, см. https://beej.us/guide/bgnet/html/multi/sockaddr_inman.html. Обычно вы смотрите на sa_family и затем приводите к конкретной структуре адресов соответствующего семейства адресов. .

TCP и UDP не имеют адресов, специфичных для них как таковых, скорее, уровень IP имеет разные размеры адресов для IPv4 и IPv6.

Смотри также:

0 голосов
/ 23 октября 2015

Я обнаружил это при попытке продублировать метод getnetHardwareAddress () jnetpcap в C / C ++. MAC-адрес содержится, когда sa_family равен 17 (0x11, AF_PACKET), в байтах 10-15.

...