Reputation: 1520
I'm building a simple socket web server using the sys/socket.h lib, and I came across the socklen_t
and sa_family_t
data types and am a bit confused on what their actual purpose is.
Definition:
sa_family_t
- unsigned integer type.socklen_t
- an unsigned opaque integer type of length of at least 32-bits.Now I understand that the <sys/socket>
lib declares three structures (sockaddr
,msghdr
,cmsghdr
) which contain members that declare these data types.
sa_family_t sa_family address family
socklen_t msg_namelen size of address
socklen_t msg_controllen ancillary data buffer len
socklen_t cmsg_len data byte count, including the cmsghdr
But why create new data types, why not just use an unsigned int
data type?
Upvotes: 7
Views: 28760
Reputation: 224342
By declaring specific types for these fields, it decouples them from a particular representation like unsigned int
.
Different architectures can be free to define different sizes for these fields, and code that uses these specific types doesn't need to worry about how big an int
is on a given machine.
Upvotes: 10