了解struct sockaddr

时间:2011-09-14 10:38:19

标签: sockets networking network-programming network-protocols

struct sockaddr {
    unsigned short sa_family;   // address family, AF_xxx
    char           sa_data[14]; // 14 bytes of protocol address
};

在这个结构中,sa_family描述的地址族究竟是什么意思?

是否意味着像TCP / UDP这样的协议有“地址”?嗯,我认为协议可以是识别号而不是地址。

无论如何,如果是的话,那么他们的家庭在什么基础上分裂?

2 个答案:

答案 0 :(得分:20)

地址的格式和大小通常是协议特定的。

sockaddr用作一组地址结构的基础,这些地址结构就像一个有区别的联合,参见https://beej.us/guide/bgnet/html/multi/sockaddr_inman.html。您通常会查看sa_family,然后转换为相应地址系列的特定地址结构。

TCP和UDP没有特定于它们的地址,而是IP级别具有不同的IPv4和IPv6地址大小。

另见:

答案 1 :(得分:0)

我试图在C / C ++中复制jnetpcap getHardwareAddress()方法时发现了这一点。当sa_family为17(0x11,AF_PACKET)时,包含MAC地址,字节为10-15。