Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/sys/socket.h,v rcsdiff: /ftp/cvs/cvsroot/src/sys/sys/socket.h,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.98.2.1 retrieving revision 1.114 diff -u -p -r1.98.2.1 -r1.114 --- src/sys/sys/socket.h 2011/06/06 09:10:13 1.98.2.1 +++ src/sys/sys/socket.h 2015/01/24 17:15:22 1.114 @@ -1,4 +1,4 @@ -/* $NetBSD: socket.h,v 1.98.2.1 2011/06/06 09:10:13 jruoho Exp $ */ +/* $NetBSD: socket.h,v 1.114 2015/01/24 17:15:22 christos Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -97,6 +97,7 @@ typedef _BSD_SSIZE_T_ ssize_t; #endif #include +#include /* * Socket types. @@ -107,6 +108,11 @@ typedef _BSD_SSIZE_T_ ssize_t; #define SOCK_RDM 4 /* reliably-delivered message */ #define SOCK_SEQPACKET 5 /* sequenced packet stream */ +#define SOCK_CLOEXEC 0x10000000 /* set close on exec on socket */ +#define SOCK_NONBLOCK 0x20000000 /* set non blocking i/o socket */ +#define SOCK_NOSIGPIPE 0x40000000 /* don't send sigpipe */ +#define SOCK_FLAGS_MASK 0xf0000000 /* flags mask */ + /* * Option flags per-socket. */ @@ -121,6 +127,7 @@ typedef _BSD_SSIZE_T_ ssize_t; #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ #define SO_REUSEPORT 0x0200 /* allow local address & port reuse */ /* SO_OTIMESTAMP 0x0400 */ +#define SO_NOSIGPIPE 0x0800 /* no SIGPIPE from EPIPE */ #define SO_ACCEPTFILTER 0x1000 /* there is an accept filter */ #define SO_TIMESTAMP 0x2000 /* timestamp received dgram traffic */ @@ -334,7 +341,8 @@ struct sockcred { * Compute size of a sockcred structure with groups. */ #define SOCKCREDSIZE(ngrps) \ - (sizeof(struct sockcred) + (sizeof(gid_t) * ((ngrps) - 1))) + (/*CONSTCOND*/sizeof(struct sockcred) + (sizeof(gid_t) * \ + ((ngrps) ? ((ngrps) - 1) : 0))) #endif /* _NETBSD_SOURCE */ @@ -421,6 +429,8 @@ struct kinfo_pcb { #define ki_src ki_s._kis_src #define ki_dst ki_d._kid_dst +#define ki_spad ki_s._kis_pad +#define ki_dpad ki_d._kid_pad #define PCB_SLOP 20 #define PCB_ALL 0 @@ -485,6 +495,16 @@ struct msghdr { #define MSG_BCAST 0x0100 /* this message was rcvd using link-level brdcst */ #define MSG_MCAST 0x0200 /* this message was rcvd using link-level mcast */ #define MSG_NOSIGNAL 0x0400 /* do not generate SIGPIPE on EOF */ +#if defined(_NETBSD_SOURCE) +#define MSG_CMSG_CLOEXEC 0x0800 /* close on exec receiving fd */ +#define MSG_NBIO 0x1000 /* use non-blocking I/O */ +#define MSG_WAITFORONE 0x2000 /* recvmmsg() wait for one message */ + +struct mmsghdr { + struct msghdr msg_hdr; + unsigned int msg_len; +}; +#endif /* Extra flags used internally only */ #define MSG_USERFLAGS 0x0ffffff @@ -508,10 +528,11 @@ struct cmsghdr { /* given pointer to struct cmsghdr, return pointer to data */ #define CMSG_DATA(cmsg) \ - ((u_char *)(void *)(cmsg) + __CMSG_ALIGN(sizeof(struct cmsghdr))) + ((u_char *)(void *)(cmsg) + \ + __CMSG_ALIGN(sizeof(struct cmsghdr))) #define CCMSG_DATA(cmsg) \ - ((const u_char *)(const void *)(cmsg) + \ - __CMSG_ALIGN(sizeof(struct cmsghdr))) + ((const u_char *)(const void *)(cmsg) + \ + __CMSG_ALIGN(sizeof(struct cmsghdr))) /* * Alignment requirement for CMSG struct manipulation. @@ -522,18 +543,18 @@ struct cmsghdr { * without (2), we can't guarantee binary compatibility in case of future * changes in ALIGNBYTES. */ -#define __CMSG_ALIGN(n) (((n) + __cmsg_alignbytes()) & ~__cmsg_alignbytes()) +#define __CMSG_ALIGN(n) (((n) + __ALIGNBYTES) & ~__ALIGNBYTES) #ifdef _KERNEL #define CMSG_ALIGN(n) __CMSG_ALIGN(n) #endif /* given pointer to struct cmsghdr, return pointer to next cmsghdr */ #define CMSG_NXTHDR(mhdr, cmsg) \ - (((char *)(cmsg) + __CMSG_ALIGN((cmsg)->cmsg_len) + \ + (((char *)(void *)(cmsg) + __CMSG_ALIGN((cmsg)->cmsg_len) + \ __CMSG_ALIGN(sizeof(struct cmsghdr)) > \ - (((char *)(mhdr)->msg_control) + (mhdr)->msg_controllen)) ? \ + (((char *)(void *)(mhdr)->msg_control) + (mhdr)->msg_controllen)) ?\ (struct cmsghdr *)0 : \ - (struct cmsghdr *)((char *)(cmsg) + \ + (struct cmsghdr *)(void *)((char *)(void *)(cmsg) + \ __CMSG_ALIGN((cmsg)->cmsg_len))) /* @@ -542,7 +563,7 @@ struct cmsghdr { */ #define CMSG_FIRSTHDR(mhdr) \ ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \ - (struct cmsghdr *)(mhdr)->msg_control : \ + (struct cmsghdr *)(void *)(mhdr)->msg_control : \ (struct cmsghdr *)0) #define CMSG_SPACE(l) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + __CMSG_ALIGN(l)) @@ -565,10 +586,6 @@ struct cmsghdr { #include -__BEGIN_DECLS -int __cmsg_alignbytes(void); -__END_DECLS - #ifdef _KERNEL static inline socklen_t sockaddr_getlen(const struct sockaddr *sa) @@ -589,6 +606,7 @@ const struct sockaddr *sockaddr_any_by_f const void *sockaddr_anyaddr(const struct sockaddr *, socklen_t *); int sockaddr_cmp(const struct sockaddr *, const struct sockaddr *); struct sockaddr *sockaddr_dup(const struct sockaddr *, int); +int sockaddr_format(const struct sockaddr *, char *, size_t); void sockaddr_free(struct sockaddr *); __END_DECLS #endif /* _KERNEL */ @@ -603,6 +621,8 @@ int getpeername(int, struct sockaddr * _ int getsockname(int, struct sockaddr * __restrict, socklen_t * __restrict); int getsockopt(int, int, int, void *__restrict, socklen_t * __restrict); int listen(int, int); +int paccept(int, struct sockaddr * __restrict, socklen_t * __restrict, + const sigset_t * __restrict, int); ssize_t recv(int, void *, size_t, int); ssize_t recvfrom(int, void *__restrict, size_t, int, struct sockaddr * __restrict, socklen_t * __restrict); @@ -620,6 +640,13 @@ __RENAME(__socket30) #endif ; int socketpair(int, int, int, int *); + +#if defined(_NETBSD_SOURCE) +int sendmmsg(int, struct mmsghdr *, unsigned int, unsigned int); +struct timespec; +int recvmmsg(int, struct mmsghdr *, unsigned int, unsigned int, + struct timespec *); +#endif __END_DECLS #endif /* !_KERNEL */