I recently noticed the IPV6_RECVPKTINFO socket option (defined in
RFC3542) doesn't work on HP-UX 11.11 (more specifically, uname -a says
the version is "B.11.11 U 9000/785 2016020223").
I've compiled the source code attached below by the following command:
% cc -o foo -D_XOPEN_SOURCE_EXTENDED foo.c
(HP-UX needs _XOPEN_SOURCE_EXTENDED to enable the cmsg framework)
I then ran the compiled program and sent a UDP packet to the socket
the program opened. According to the output, it received the packet,
but didn't return pktinfo as an ancillary data item:
received 27-byte data, 0-byte cmsg
Is this a bug of the HP-UX kernel, or is there any clue for this
(e.g. additional socket option, etc)?
JINMEI, Tatuya
Communication Platform Lab.
Corporate R&D Center, Toshiba Corp.
[EMAIL PROTECTED]
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/uio.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
main()
{
char cmsgbuf[1024], recvbuf[1024];
struct addrinfo hints, *res;
struct msghdr msg;
struct iovec iov[1];
int on, s, cc;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET6;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_PASSIVE;
getaddrinfo(NULL, "30053", &hints, &res); /* port # doesn't matter */
s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
on = 1;
setsockopt(s, IPPROTO_IPV6, IPV6_RECVPKTINFO, &on, sizeof(on));
bind(s, res->ai_addr, res->ai_addrlen);
memset(&msg, 0, sizeof(msg));
msg.msg_controllen = sizeof(cmsgbuf);
msg.msg_control = cmsgbuf;
iov[0].iov_base = recvbuf;
iov[0].iov_len = sizeof(recvbuf);
msg.msg_iov = iov;
msg.msg_iovlen = 1;
cc = recvmsg(s, &msg, 0);
printf("received %d-byte data, %d-byte cmsg\n",
cc, msg.msg_controllen);
exit(0);
}
---------------------------------------------------------------------
The IPv6 Users Mailing List
Unsubscribe by sending "unsubscribe users" to [EMAIL PROTECTED]