31 Jul 2012 18:43
Using recvmsg() with non-unicast datagram (UDP) socket: inconsistent results
Lavrentiev, Anton (NIH/NLM/NCBI) [C] <lavr <at> ncbi.nlm.nih.gov>
2012-07-31 16:43:59 GMT
2012-07-31 16:43:59 GMT
Hi,
Observed is an inconsistent result when recvmsg() is used on a
UDP socket with or without ancillary control message parameters.
Here's is an example:
static char buf[1 << 16];
struct sockaddr_in sin;
struct msghdr msg;
struct iovec iov;
#ifndef CYGWIN_BUG
char cmsgbuf[32];
#endif /*CYGWIN_BUG*/
int n;
iov.iov_base = buf;
iov.iov_len = sizeof(buf);
memset(&sin, 0, sizeof(sin));
memset(&msg, 0, sizeof(msg));
msg.msg_name = (caddr_t) &sin;
msg.msg_namelen = sizeof(sin);
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
#ifndef CYGWIN_BUG
memset(cmsgbuf, 0, sizeof(cmsgbuf));
msg.msg_control = cmsgbuf;
msg.msg_controllen = sizeof(cmsgbuf);
#endif /*CYGWIN_BUG*/
(Continue reading)
RSS Feed