Erich Hoover ehoover@mines.edu writes:
@@ -185,6 +185,25 @@ VOID WINAPI GetAcceptExSockaddrs(PVOID, DWORD, DWORD, DWORD, struct WS(sockaddr) BOOL WINAPI TransmitFile(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD); INT WINAPI WSARecvEx(SOCKET, char *, INT, INT *);
+/*
- Macros for retrieving control message data returned by WSARecvMsg()
 - */
 +#define WSA_CMSG_DATA(cmsg) ((UCHAR*)((WSACMSGHDR*)(cmsg)+1)) +#define WSA_CMSG_FIRSTHDR(mhdr) \
((size_t) (mhdr)->Control.len >= sizeof(WSACMSGHDR) \? (WSACMSGHDR *) (mhdr)->Control.buf : (WSACMSGHDR *) 0)+#define WSA_CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \
& (size_t) ~(sizeof (size_t) - 1))+static inline WSACMSGHDR *WSA_CMSG_NXTHDR(WSAMSG *msg, WSACMSGHDR *cmsg) +{
- if ((size_t)(msg)->Control.len<sizeof(WSACMSGHDR)) return 0;
 - cmsg = (WSACMSGHDR*)((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len));
 - if ((unsigned char*)(cmsg+1) > ((unsigned char*)msg->Control.buf + msg->Control.len)
 || ((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len) > ((unsigned char *)msg->Control.buf + msg->Control.len)) )return 0;- return cmsg;
 +}
This should go into ws2def.h. Also WSA_CMSG_NXTHDR is supposed to be a macro, not an inline function.