RFC 2292 CMSG_FIRSTHDR macro...
George V. Neville-Neil
gnn at neville-neil.com
Wed Apr 28 17:07:51 PDT 2004
Howdy,
This should be a minor nit but, is there any reason we
implement this this way:
#define CMSG_FIRSTHDR(mhdr) ((struct cmsghdr *)(mhdr)->msg_control)
instead of this way:
#define CMSG_FIRSTHDR(mhdr) \
( (mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
(struct cmsghdr *)(mhdr)->msg_control : \
(struct cmsghdr *)NULL )
as suggested in RFC 2292?
A coworker of mine asked about this and then I got to wondering
myself.
The RFC says:
(Note: Most existing implementations do not test the value of
msg_controllen, and just return the value of msg_control. The value
of msg_controllen must be tested, because if the application asks
recvmsg() to return ancillary data, by setting msg_control to point
to the application's buffer and setting msg_controllen to the length
of this buffer, the kernel indicates that no ancillary data is
available by setting msg_controllen to 0 on return. It is also
easier to put this test into this macro, than making the application
perform the test.)
Later,
George
More information about the freebsd-net
mailing list