数据类型 - socklen_t,sa_family_t

7
我正在使用 sys/socket.h 库构建一个简单的套接字Web服务器,我遇到了 socklen_tsa_family_t 数据类型,并对它们的实际用途有些困惑。
定义如下:
  • sa_family_t - 无符号整数类型。
  • socklen_t - 长度至少为32位的无符号不透明整数类型。
现在我了解到 <sys/socket> 库声明了三个结构体(sockaddrmsghdrcmsghdr),其中包含声明这些数据类型的成员。
  • sa_family_t sa_family 地址族
  • socklen_t msg_namelen 地址大小
  • socklen_t msg_controllen 辅助数据缓冲区长度
  • socklen_t cmsg_len 数据字节数,包括 cmsghdr
但是为什么要创建新的数据类型,而不是使用 unsigned int 数据类型呢?
1个回答

9
通过为这些字段声明特定类型,使它们与像 unsigned int 这样的特定表示分离开来。
不同的架构可以自由地定义这些字段的不同大小,使用这些特定类型的代码不需要担心在特定机器上 int 的大小。

好的,是的,这很有道理...所以基本上当它说“至少”32位时,它意味着它“可能”更大,并且那将是基于架构的,对吗? - Jordan Davis
1
正确。同样适用于 size_t - dbush
很棒,而且很有道理,如果你想在32/64位系统之间移植它,建议不要使用比2^32-1更高的值。感谢您的帮助,我非常感激! - Jordan Davis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接