/*
* %CopyrightBegin%
*
* Copyright Ericsson AB 1997-2009. All Rights Reserved.
*
* The contents of this file are subject to the Erlang Public License,
* Version 1.1, (the "License"); you may not use this file except in
* compliance with the License. You should have received a copy of the
* Erlang Public License along with this software. If not, it can be
* retrieved online at http://www.erlang.org/.
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*
* %CopyrightEnd%
*/
typedef struct _WinSockFuncs {
int (WSAAPI *WSAStartup)(WORD wVersionRequired, LPWSADATA lpWSAData);
int (WSAAPI *WSACleanup)(void);
int (WSAAPI *WSAGetLastError)(void);
DWORD (WSAAPI *WSAWaitForMultipleEvents) (DWORD cEvents,
const WSAEVENT FAR * lphEvents,
BOOL fWaitAll,
DWORD dwTimeout,
BOOL fAlertable);
WSAEVENT (WSAAPI *WSACreateEvent)(void);
BOOL (WSAAPI *WSACloseEvent)(WSAEVENT hEvent);
BOOL (WSAAPI *WSASetEvent)(WSAEVENT hEvent);
BOOL (WSAAPI *WSAResetEvent)(WSAEVENT hEvent);
int (WSAAPI *WSAEventSelect)(SOCKET s, WSAEVENT hEventObject,
long lNetworkEvents);
int (WSAAPI *WSAEnumNetworkEvents)(SOCKET s,
WSAEVENT hEventObject,
LPWSANETWORKEVENTS lpNetworkEvents);
int (WSAAPI *WSAIoctl)(SOCKET s,
DWORD dwIoControlCode,
LPVOID lpvInBuffer,
DWORD cbInBuffer,
LPVOID lpvOUTBuffer,
DWORD cbOUTBuffer,
LPDWORD lpcbBytesReturned,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE
);
SOCKET (WSAAPI *accept)(SOCKET s, struct sockaddr FAR *addr,
int FAR *addrlen);
int (WSAAPI *bind)(SOCKET s, const struct sockaddr FAR *addr,
int namelen);
int (WSAAPI *closesocket)(SOCKET s);
int (WSAAPI *connect)(SOCKET s, const struct sockaddr FAR *name,
int namelen);
int (WSAAPI *ioctlsocket)(SOCKET s, long cmd, u_long FAR *argp);
int (WSAAPI *getsockopt)(SOCKET s, int level, int optname,
char FAR * optval, int FAR *optlen);
u_long (WSAAPI *htonl)(u_long hostlong);
u_short (WSAAPI *htons)(u_short hostshort);
unsigned long (WSAAPI *inet_addr)(const char FAR * cp);
char FAR * (WSAAPI *inet_ntoa)(struct in_addr in);
int (WSAAPI *listen)(SOCKET s, int backlog);
u_short (WSAAPI *ntohs)(u_short netshort);
int (WSAAPI *recv)(SOCKET s, char FAR * buf, int len, int flags);
int (WSAAPI *send)(SOCKET s, const char FAR * buf, int len, int flags);
int (WSAAPI *setsockopt)(SOCKET s, int level, int optname,
const char FAR * optval, int optlen);
int (WSAAPI *shutdown)(SOCKET s, int how);
SOCKET (WSAAPI *socket)(int af, int type, int protocol);
struct hostent FAR * (WSAAPI *gethostbyname)(const char FAR * name);
struct hostent FAR * (WSAAPI *gethostbyaddr)(const char FAR *addr,
int addrlen, int addrtype);
int (WSAAPI *gethostname)(char FAR * name, int namelen);
struct servent FAR * (WSAAPI *getservbyname)(const char FAR * name,
const char FAR * proto);
struct servent FAR * (WSAAPI *getservbyport)(int port,
const char FAR * proto);
int (WSAAPI *getsockname)(SOCKET sock, struct sockaddr FAR *name,
int FAR *namelen);
/*
* New, added for inet_drv.
*/
int (WSAAPI *getpeername)(SOCKET s, struct sockaddr FAR * name,
int FAR * namelen);
u_long (WSAAPI *ntohl)(u_long netlong);
int (WSAAPI *WSASend)(SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent, DWORD dwFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
int (WSAAPI *sendto)(SOCKET s, const char FAR * buf, int len,
int flags, const struct sockaddr FAR * to, int tolen);
int (WSAAPI *recvfrom)(SOCKET s, char FAR * buf, int len, int flags,
struct sockaddr FAR * from, int FAR * fromlen);
} WinSockFuncs;
extern WinSockFuncs winSock;
extern int tcp_lookup_functions(void);