address.
The cmsghdr fields have the following values:
.Bd -literal
-cmsg_len = sizeof(struct in_addr)
+cmsg_len = CMSG_LEN(sizeof(struct in_addr))
cmsg_level = IPPROTO_IP
cmsg_type = IP_RECVDSTADDR
.Ed
+.Pp
+If the
+.Dv IP_RECVTOS
+option is enabled on a
+.Dv SOCK_DGRAM
+or
+.Dv SOCK_RAW
+socket,
+the
+.Xr recvmsg
+call will return the TOS (type of service) field of the IP header.
+The msg_control field in the msghdr structure points to a buffer
+that contains a cmsghdr structure followed by the TOS.
+The cmsghdr fields have the following values:
+.Bd -literal
+cmsg_len = CMSG_LEN(sizeof(u_char))
+cmsg_level = IPPROTO_IP
+cmsg_type = IP_RECVTOS
+.Ed
.Ss "Multicast Options"
.Pp
.Tn IP
ip->ip_v = IPVERSION;
ip->ip_hl = hlen >> 2;
ip->ip_id = 0; /* 0 means kernel set appropriate value */
-ip->ip_off = htons(offset);
-ip->ip_len = htons(len);
+ip->ip_off = offset;
+ip->ip_len = len;
.Ed
.sp .5
-Additionally note that starting with
-.Tn OpenBSD 2.1
-the ip_off and ip_len fields are in network byte order.
+.Pp
+Note that
+the ip_off and ip_len fields are in host byte order.
+.Pp
If the header source address is set to
.Dv INADDR_ANY,
the kernel will choose an appropriate address.
.El
.Sh SEE ALSO
.Xr getsockopt 2 ,
-.Xr send 2 ,
.Xr recv 2 ,
-.Xr intro 4 ,
+.Xr send 2 ,
.Xr icmp 4 ,
-.Xr inet 4
+.Xr inet 4 ,
+.Xr intro 4
.Sh HISTORY
The
.Nm