3#include <cx/net/net_private.h>
4#include <cx/platform/win.h>
18bool netAddrToSockaddr(_In_
const NetAddr* addr, _Out_
struct sockaddr_storage* sa,
26bool netAddrFromSockaddr(_Out_
NetAddr* addr, _In_
const struct sockaddr* sa);
35bool _netHaveCancelIoEx(
void);
42#if defined(WSA_CMSG_FIRSTHDR) && defined(IP_PKTINFO)
43#define NET_HAVE_WSAMSG 1
52#if defined(NET_HAVE_WSAMSG) && !defined(WSAID_WSASENDMSG)
53#define WSAID_WSASENDMSG \
54 { 0xa441e712, 0x754f, 0x43ca, { 0x84, 0xa7, 0x0d, 0xee, 0x44, 0xcf, 0x60, 0x6d } }
57#if defined(NET_HAVE_WSAMSG)
61#define NET_CMSG_SPACE 128
63typedef INT(WSAAPI* NetRecvMsgFn)(SOCKET, LPWSAMSG, LPDWORD, LPWSAOVERLAPPED,
64 LPWSAOVERLAPPED_COMPLETION_ROUTINE);
66typedef INT(WSAAPI* NetSendMsgFn)(SOCKET, LPWSAMSG, DWORD, LPDWORD, LPWSAOVERLAPPED,
67 LPWSAOVERLAPPED_COMPLETION_ROUTINE);
71NetRecvMsgFn _netRecvMsgFn(
void);
72NetSendMsgFn _netSendMsgFn(
void);
81bool _netPktInfoToCmsg(_Inout_ WSAMSG* mh, _In_
const NetPktInfo* info,
int family);
85void _netCmsgToPktInfo(_Inout_ WSAMSG* mh, _Out_
NetPktInfo* info);
93typedef WSABUF NetPlatIov;
117_meta_inline
size_t netIovToPlatform(_Out_writes_(count) NetPlatIov* out,
118 _In_reads_(count)
const BufIov* iov,
size_t count)
120 for (
size_t i = 0; i < count; ++i) {
123 devAssertMsg(iov[i].len <= ULONG_MAX,
"iov entry too large for WSABUF");
124 out[i].buf = (CHAR*)iov[i].data;
125 out[i].len = (ULONG)iov[i].len;
Simple buffer management.
#define devAssertMsg(expr, msg)
intptr NetSockHandle
Platform-neutral OS socket handle: a Windows SOCKET or a Unix file descriptor.
NetErrorCode
Network error codes.
Per-datagram information the IP layer carries alongside the payload.