mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-22 14:39:24 -05:00
Move the two existing DECL/GET_foo_FUNCTION macro sets used for dynamic
linking on Windows into a single global one, which can cope with function renaming. Intended to enable eventual removal of ANSI-specific DoSomethingA references (although I've not removed any). [originally from svn r8738]
This commit is contained in:
parent
06497952de
commit
24b6168c1d
@ -8,37 +8,30 @@
|
|||||||
#include "sshgss.h"
|
#include "sshgss.h"
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
|
||||||
#define NOTHING
|
DECL_WINDOWS_FUNCTION(static, SECURITY_STATUS,
|
||||||
#define DECL_SSPI_FUNCTION(linkage, rettype, name, params) \
|
AcquireCredentialsHandleA,
|
||||||
typedef rettype (WINAPI *t_##name) params; \
|
(SEC_CHAR *, SEC_CHAR *, ULONG, PLUID,
|
||||||
linkage t_##name p_##name
|
PVOID, SEC_GET_KEY_FN, PVOID, PCredHandle, PTimeStamp));
|
||||||
#define GET_SSPI_FUNCTION(module, name) \
|
DECL_WINDOWS_FUNCTION(static, SECURITY_STATUS,
|
||||||
p_##name = module ? (t_##name) GetProcAddress(module, #name) : NULL
|
InitializeSecurityContextA,
|
||||||
|
(PCredHandle, PCtxtHandle, SEC_CHAR *, ULONG, ULONG,
|
||||||
DECL_SSPI_FUNCTION(static, SECURITY_STATUS,
|
ULONG, PSecBufferDesc, ULONG, PCtxtHandle,
|
||||||
AcquireCredentialsHandleA,
|
PSecBufferDesc, PULONG, PTimeStamp));
|
||||||
(SEC_CHAR *, SEC_CHAR *, ULONG, PLUID,
|
DECL_WINDOWS_FUNCTION(static, SECURITY_STATUS,
|
||||||
PVOID, SEC_GET_KEY_FN, PVOID, PCredHandle, PTimeStamp));
|
FreeContextBuffer,
|
||||||
DECL_SSPI_FUNCTION(static, SECURITY_STATUS,
|
(PVOID));
|
||||||
InitializeSecurityContextA,
|
DECL_WINDOWS_FUNCTION(static, SECURITY_STATUS,
|
||||||
(PCredHandle, PCtxtHandle, SEC_CHAR *, ULONG, ULONG,
|
FreeCredentialsHandle,
|
||||||
ULONG, PSecBufferDesc, ULONG, PCtxtHandle,
|
(PCredHandle));
|
||||||
PSecBufferDesc, PULONG, PTimeStamp));
|
DECL_WINDOWS_FUNCTION(static, SECURITY_STATUS,
|
||||||
DECL_SSPI_FUNCTION(static, SECURITY_STATUS,
|
DeleteSecurityContext,
|
||||||
FreeContextBuffer,
|
(PCtxtHandle));
|
||||||
(PVOID));
|
DECL_WINDOWS_FUNCTION(static, SECURITY_STATUS,
|
||||||
DECL_SSPI_FUNCTION(static, SECURITY_STATUS,
|
QueryContextAttributesA,
|
||||||
FreeCredentialsHandle,
|
(PCtxtHandle, ULONG, PVOID));
|
||||||
(PCredHandle));
|
DECL_WINDOWS_FUNCTION(static, SECURITY_STATUS,
|
||||||
DECL_SSPI_FUNCTION(static, SECURITY_STATUS,
|
MakeSignature,
|
||||||
DeleteSecurityContext,
|
(PCtxtHandle, ULONG, PSecBufferDesc, ULONG));
|
||||||
(PCtxtHandle));
|
|
||||||
DECL_SSPI_FUNCTION(static, SECURITY_STATUS,
|
|
||||||
QueryContextAttributesA,
|
|
||||||
(PCtxtHandle, ULONG, PVOID));
|
|
||||||
DECL_SSPI_FUNCTION(static, SECURITY_STATUS,
|
|
||||||
MakeSignature,
|
|
||||||
(PCtxtHandle, ULONG, PSecBufferDesc, ULONG));
|
|
||||||
|
|
||||||
static HMODULE security_module = NULL;
|
static HMODULE security_module = NULL;
|
||||||
|
|
||||||
@ -61,13 +54,13 @@ int ssh_gss_init(void)
|
|||||||
|
|
||||||
security_module = LoadLibrary("secur32.dll");
|
security_module = LoadLibrary("secur32.dll");
|
||||||
if (security_module) {
|
if (security_module) {
|
||||||
GET_SSPI_FUNCTION(security_module, AcquireCredentialsHandleA);
|
GET_WINDOWS_FUNCTION(security_module, AcquireCredentialsHandleA);
|
||||||
GET_SSPI_FUNCTION(security_module, InitializeSecurityContextA);
|
GET_WINDOWS_FUNCTION(security_module, InitializeSecurityContextA);
|
||||||
GET_SSPI_FUNCTION(security_module, FreeContextBuffer);
|
GET_WINDOWS_FUNCTION(security_module, FreeContextBuffer);
|
||||||
GET_SSPI_FUNCTION(security_module, FreeCredentialsHandle);
|
GET_WINDOWS_FUNCTION(security_module, FreeCredentialsHandle);
|
||||||
GET_SSPI_FUNCTION(security_module, DeleteSecurityContext);
|
GET_WINDOWS_FUNCTION(security_module, DeleteSecurityContext);
|
||||||
GET_SSPI_FUNCTION(security_module, QueryContextAttributesA);
|
GET_WINDOWS_FUNCTION(security_module, QueryContextAttributesA);
|
||||||
GET_SSPI_FUNCTION(security_module, MakeSignature);
|
GET_WINDOWS_FUNCTION(security_module, MakeSignature);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
142
windows/winnet.c
142
windows/winnet.c
@ -144,65 +144,49 @@ static int cmpforsearch(void *av, void *bv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define NOTHING
|
DECL_WINDOWS_FUNCTION(static, int, WSAStartup, (WORD, LPWSADATA));
|
||||||
#define DECL_WINSOCK_FUNCTION(linkage, rettype, name, params) \
|
DECL_WINDOWS_FUNCTION(static, int, WSACleanup, (void));
|
||||||
typedef rettype (WINAPI *t_##name) params; \
|
DECL_WINDOWS_FUNCTION(static, int, closesocket, (SOCKET));
|
||||||
linkage t_##name p_##name
|
DECL_WINDOWS_FUNCTION(static, u_long, ntohl, (u_long));
|
||||||
#define GET_WINSOCK_FUNCTION(module, name) \
|
DECL_WINDOWS_FUNCTION(static, u_long, htonl, (u_long));
|
||||||
p_##name = module ? (t_##name) GetProcAddress(module, #name) : NULL
|
DECL_WINDOWS_FUNCTION(static, u_short, htons, (u_short));
|
||||||
|
DECL_WINDOWS_FUNCTION(static, u_short, ntohs, (u_short));
|
||||||
DECL_WINSOCK_FUNCTION(NOTHING, int, WSAAsyncSelect,
|
DECL_WINDOWS_FUNCTION(static, int, gethostname, (char *, int));
|
||||||
(SOCKET, HWND, u_int, long));
|
DECL_WINDOWS_FUNCTION(static, struct hostent FAR *, gethostbyname,
|
||||||
DECL_WINSOCK_FUNCTION(NOTHING, int, WSAEventSelect, (SOCKET, WSAEVENT, long));
|
|
||||||
DECL_WINSOCK_FUNCTION(NOTHING, int, select,
|
|
||||||
(int, fd_set FAR *, fd_set FAR *,
|
|
||||||
fd_set FAR *, const struct timeval FAR *));
|
|
||||||
DECL_WINSOCK_FUNCTION(NOTHING, int, WSAGetLastError, (void));
|
|
||||||
DECL_WINSOCK_FUNCTION(NOTHING, int, WSAEnumNetworkEvents,
|
|
||||||
(SOCKET, WSAEVENT, LPWSANETWORKEVENTS));
|
|
||||||
DECL_WINSOCK_FUNCTION(static, int, WSAStartup, (WORD, LPWSADATA));
|
|
||||||
DECL_WINSOCK_FUNCTION(static, int, WSACleanup, (void));
|
|
||||||
DECL_WINSOCK_FUNCTION(static, int, closesocket, (SOCKET));
|
|
||||||
DECL_WINSOCK_FUNCTION(static, u_long, ntohl, (u_long));
|
|
||||||
DECL_WINSOCK_FUNCTION(static, u_long, htonl, (u_long));
|
|
||||||
DECL_WINSOCK_FUNCTION(static, u_short, htons, (u_short));
|
|
||||||
DECL_WINSOCK_FUNCTION(static, u_short, ntohs, (u_short));
|
|
||||||
DECL_WINSOCK_FUNCTION(static, int, gethostname, (char *, int));
|
|
||||||
DECL_WINSOCK_FUNCTION(static, struct hostent FAR *, gethostbyname,
|
|
||||||
(const char FAR *));
|
(const char FAR *));
|
||||||
DECL_WINSOCK_FUNCTION(static, struct servent FAR *, getservbyname,
|
DECL_WINDOWS_FUNCTION(static, struct servent FAR *, getservbyname,
|
||||||
(const char FAR *, const char FAR *));
|
(const char FAR *, const char FAR *));
|
||||||
DECL_WINSOCK_FUNCTION(static, unsigned long, inet_addr, (const char FAR *));
|
DECL_WINDOWS_FUNCTION(static, unsigned long, inet_addr, (const char FAR *));
|
||||||
DECL_WINSOCK_FUNCTION(static, char FAR *, inet_ntoa, (struct in_addr));
|
DECL_WINDOWS_FUNCTION(static, char FAR *, inet_ntoa, (struct in_addr));
|
||||||
DECL_WINSOCK_FUNCTION(static, int, connect,
|
DECL_WINDOWS_FUNCTION(static, int, connect,
|
||||||
(SOCKET, const struct sockaddr FAR *, int));
|
(SOCKET, const struct sockaddr FAR *, int));
|
||||||
DECL_WINSOCK_FUNCTION(static, int, bind,
|
DECL_WINDOWS_FUNCTION(static, int, bind,
|
||||||
(SOCKET, const struct sockaddr FAR *, int));
|
(SOCKET, const struct sockaddr FAR *, int));
|
||||||
DECL_WINSOCK_FUNCTION(static, int, setsockopt,
|
DECL_WINDOWS_FUNCTION(static, int, setsockopt,
|
||||||
(SOCKET, int, int, const char FAR *, int));
|
(SOCKET, int, int, const char FAR *, int));
|
||||||
DECL_WINSOCK_FUNCTION(static, SOCKET, socket, (int, int, int));
|
DECL_WINDOWS_FUNCTION(static, SOCKET, socket, (int, int, int));
|
||||||
DECL_WINSOCK_FUNCTION(static, int, listen, (SOCKET, int));
|
DECL_WINDOWS_FUNCTION(static, int, listen, (SOCKET, int));
|
||||||
DECL_WINSOCK_FUNCTION(static, int, send, (SOCKET, const char FAR *, int, int));
|
DECL_WINDOWS_FUNCTION(static, int, send, (SOCKET, const char FAR *, int, int));
|
||||||
DECL_WINSOCK_FUNCTION(static, int, ioctlsocket,
|
DECL_WINDOWS_FUNCTION(static, int, ioctlsocket,
|
||||||
(SOCKET, long, u_long FAR *));
|
(SOCKET, long, u_long FAR *));
|
||||||
DECL_WINSOCK_FUNCTION(static, SOCKET, accept,
|
DECL_WINDOWS_FUNCTION(static, SOCKET, accept,
|
||||||
(SOCKET, struct sockaddr FAR *, int FAR *));
|
(SOCKET, struct sockaddr FAR *, int FAR *));
|
||||||
DECL_WINSOCK_FUNCTION(static, int, recv, (SOCKET, char FAR *, int, int));
|
DECL_WINDOWS_FUNCTION(static, int, recv, (SOCKET, char FAR *, int, int));
|
||||||
DECL_WINSOCK_FUNCTION(static, int, WSAIoctl,
|
DECL_WINDOWS_FUNCTION(static, int, WSAIoctl,
|
||||||
(SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD,
|
(SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD,
|
||||||
LPDWORD, LPWSAOVERLAPPED,
|
LPDWORD, LPWSAOVERLAPPED,
|
||||||
LPWSAOVERLAPPED_COMPLETION_ROUTINE));
|
LPWSAOVERLAPPED_COMPLETION_ROUTINE));
|
||||||
#ifndef NO_IPV6
|
#ifndef NO_IPV6
|
||||||
DECL_WINSOCK_FUNCTION(static, int, getaddrinfo,
|
DECL_WINDOWS_FUNCTION(static, int, getaddrinfo,
|
||||||
(const char *nodename, const char *servname,
|
(const char *nodename, const char *servname,
|
||||||
const struct addrinfo *hints, struct addrinfo **res));
|
const struct addrinfo *hints, struct addrinfo **res));
|
||||||
DECL_WINSOCK_FUNCTION(static, void, freeaddrinfo, (struct addrinfo *res));
|
DECL_WINDOWS_FUNCTION(static, void, freeaddrinfo, (struct addrinfo *res));
|
||||||
DECL_WINSOCK_FUNCTION(static, int, getnameinfo,
|
DECL_WINDOWS_FUNCTION(static, int, getnameinfo,
|
||||||
(const struct sockaddr FAR * sa, socklen_t salen,
|
(const struct sockaddr FAR * sa, socklen_t salen,
|
||||||
char FAR * host, size_t hostlen, char FAR * serv,
|
char FAR * host, size_t hostlen, char FAR * serv,
|
||||||
size_t servlen, int flags));
|
size_t servlen, int flags));
|
||||||
DECL_WINSOCK_FUNCTION(static, char *, gai_strerror, (int ecode));
|
DECL_WINDOWS_FUNCTION(static, char *, gai_strerror, (int ecode));
|
||||||
DECL_WINSOCK_FUNCTION(static, int, WSAAddressToStringA,
|
DECL_WINDOWS_FUNCTION(static, int, WSAAddressToStringA,
|
||||||
(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFO,
|
(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFO,
|
||||||
LPSTR, LPDWORD));
|
LPSTR, LPDWORD));
|
||||||
#endif
|
#endif
|
||||||
@ -256,10 +240,10 @@ void sk_init(void)
|
|||||||
#ifdef NET_SETUP_DIAGNOSTICS
|
#ifdef NET_SETUP_DIAGNOSTICS
|
||||||
logevent(NULL, "Native WinSock IPv6 support detected");
|
logevent(NULL, "Native WinSock IPv6 support detected");
|
||||||
#endif
|
#endif
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, getaddrinfo);
|
GET_WINDOWS_FUNCTION(winsock_module, getaddrinfo);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, freeaddrinfo);
|
GET_WINDOWS_FUNCTION(winsock_module, freeaddrinfo);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, getnameinfo);
|
GET_WINDOWS_FUNCTION(winsock_module, getnameinfo);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, gai_strerror);
|
GET_WINDOWS_FUNCTION(winsock_module, gai_strerror);
|
||||||
} else {
|
} else {
|
||||||
/* Fall back to wship6.dll for Windows 2000 */
|
/* Fall back to wship6.dll for Windows 2000 */
|
||||||
wship6_module = LoadLibrary("wship6.dll");
|
wship6_module = LoadLibrary("wship6.dll");
|
||||||
@ -267,50 +251,50 @@ void sk_init(void)
|
|||||||
#ifdef NET_SETUP_DIAGNOSTICS
|
#ifdef NET_SETUP_DIAGNOSTICS
|
||||||
logevent(NULL, "WSH IPv6 support detected");
|
logevent(NULL, "WSH IPv6 support detected");
|
||||||
#endif
|
#endif
|
||||||
GET_WINSOCK_FUNCTION(wship6_module, getaddrinfo);
|
GET_WINDOWS_FUNCTION(wship6_module, getaddrinfo);
|
||||||
GET_WINSOCK_FUNCTION(wship6_module, freeaddrinfo);
|
GET_WINDOWS_FUNCTION(wship6_module, freeaddrinfo);
|
||||||
GET_WINSOCK_FUNCTION(wship6_module, getnameinfo);
|
GET_WINDOWS_FUNCTION(wship6_module, getnameinfo);
|
||||||
GET_WINSOCK_FUNCTION(wship6_module, gai_strerror);
|
GET_WINDOWS_FUNCTION(wship6_module, gai_strerror);
|
||||||
} else {
|
} else {
|
||||||
#ifdef NET_SETUP_DIAGNOSTICS
|
#ifdef NET_SETUP_DIAGNOSTICS
|
||||||
logevent(NULL, "No IPv6 support detected");
|
logevent(NULL, "No IPv6 support detected");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GET_WINSOCK_FUNCTION(winsock2_module, WSAAddressToStringA);
|
GET_WINDOWS_FUNCTION(winsock2_module, WSAAddressToStringA);
|
||||||
#else
|
#else
|
||||||
#ifdef NET_SETUP_DIAGNOSTICS
|
#ifdef NET_SETUP_DIAGNOSTICS
|
||||||
logevent(NULL, "PuTTY was built without IPv6 support");
|
logevent(NULL, "PuTTY was built without IPv6 support");
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, WSAAsyncSelect);
|
GET_WINDOWS_FUNCTION(winsock_module, WSAAsyncSelect);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, WSAEventSelect);
|
GET_WINDOWS_FUNCTION(winsock_module, WSAEventSelect);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, select);
|
GET_WINDOWS_FUNCTION(winsock_module, select);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, WSAGetLastError);
|
GET_WINDOWS_FUNCTION(winsock_module, WSAGetLastError);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, WSAEnumNetworkEvents);
|
GET_WINDOWS_FUNCTION(winsock_module, WSAEnumNetworkEvents);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, WSAStartup);
|
GET_WINDOWS_FUNCTION(winsock_module, WSAStartup);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, WSACleanup);
|
GET_WINDOWS_FUNCTION(winsock_module, WSACleanup);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, closesocket);
|
GET_WINDOWS_FUNCTION(winsock_module, closesocket);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, ntohl);
|
GET_WINDOWS_FUNCTION(winsock_module, ntohl);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, htonl);
|
GET_WINDOWS_FUNCTION(winsock_module, htonl);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, htons);
|
GET_WINDOWS_FUNCTION(winsock_module, htons);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, ntohs);
|
GET_WINDOWS_FUNCTION(winsock_module, ntohs);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, gethostname);
|
GET_WINDOWS_FUNCTION(winsock_module, gethostname);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, gethostbyname);
|
GET_WINDOWS_FUNCTION(winsock_module, gethostbyname);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, getservbyname);
|
GET_WINDOWS_FUNCTION(winsock_module, getservbyname);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, inet_addr);
|
GET_WINDOWS_FUNCTION(winsock_module, inet_addr);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, inet_ntoa);
|
GET_WINDOWS_FUNCTION(winsock_module, inet_ntoa);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, connect);
|
GET_WINDOWS_FUNCTION(winsock_module, connect);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, bind);
|
GET_WINDOWS_FUNCTION(winsock_module, bind);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, setsockopt);
|
GET_WINDOWS_FUNCTION(winsock_module, setsockopt);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, socket);
|
GET_WINDOWS_FUNCTION(winsock_module, socket);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, listen);
|
GET_WINDOWS_FUNCTION(winsock_module, listen);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, send);
|
GET_WINDOWS_FUNCTION(winsock_module, send);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, ioctlsocket);
|
GET_WINDOWS_FUNCTION(winsock_module, ioctlsocket);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, accept);
|
GET_WINDOWS_FUNCTION(winsock_module, accept);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, recv);
|
GET_WINDOWS_FUNCTION(winsock_module, recv);
|
||||||
GET_WINSOCK_FUNCTION(winsock_module, WSAIoctl);
|
GET_WINDOWS_FUNCTION(winsock_module, WSAIoctl);
|
||||||
|
|
||||||
/* Try to get the best WinSock version we can get */
|
/* Try to get the best WinSock version we can get */
|
||||||
if (!sk_startup(2,2) &&
|
if (!sk_startup(2,2) &&
|
||||||
|
@ -73,6 +73,19 @@ struct FontSpec {
|
|||||||
#define BOXRESULT (DLGWINDOWEXTRA + sizeof(LONG_PTR))
|
#define BOXRESULT (DLGWINDOWEXTRA + sizeof(LONG_PTR))
|
||||||
#define DF_END 0x0001
|
#define DF_END 0x0001
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Dynamically linked functions.
|
||||||
|
* This is somewhat circuitous to allow function-renaming macros to be
|
||||||
|
* expanded, principally the ANSI/Unicode DoSomethingA/DoSomethingW.
|
||||||
|
*/
|
||||||
|
#define DECL_WINDOWS_FUNCTION(linkage, rettype, name, params) \
|
||||||
|
typedef rettype (WINAPI *t_##name) params; \
|
||||||
|
linkage t_##name p_##name
|
||||||
|
#define STR1(x) #x
|
||||||
|
#define STR(x) STR1(x)
|
||||||
|
#define GET_WINDOWS_FUNCTION(module, name) \
|
||||||
|
p_##name = module ? (t_##name) GetProcAddress(module, STR(name)) : NULL
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Global variables. Most modules declare these `extern', but
|
* Global variables. Most modules declare these `extern', but
|
||||||
* window.c will do `#define PUTTY_DO_GLOBALS' before including this
|
* window.c will do `#define PUTTY_DO_GLOBALS' before including this
|
||||||
@ -205,16 +218,16 @@ GLOBAL void *logctx;
|
|||||||
* that module must be exported from it as function pointers. So
|
* that module must be exported from it as function pointers. So
|
||||||
* here they are.
|
* here they are.
|
||||||
*/
|
*/
|
||||||
extern int (WINAPI *p_WSAAsyncSelect)
|
DECL_WINDOWS_FUNCTION(GLOBAL, int, WSAAsyncSelect,
|
||||||
(SOCKET s, HWND hWnd, u_int wMsg, long lEvent);
|
(SOCKET, HWND, u_int, long));
|
||||||
extern int (WINAPI *p_WSAEventSelect)
|
DECL_WINDOWS_FUNCTION(GLOBAL, int, WSAEventSelect,
|
||||||
(SOCKET s, WSAEVENT hEventObject, long lNetworkEvents);
|
(SOCKET, WSAEVENT, long));
|
||||||
extern int (WINAPI *p_select)
|
DECL_WINDOWS_FUNCTION(GLOBAL, int, select,
|
||||||
(int nfds, fd_set FAR * readfds, fd_set FAR * writefds,
|
(int, fd_set FAR *, fd_set FAR *,
|
||||||
fd_set FAR *exceptfds, const struct timeval FAR * timeout);
|
fd_set FAR *, const struct timeval FAR *));
|
||||||
extern int (WINAPI *p_WSAGetLastError)(void);
|
DECL_WINDOWS_FUNCTION(GLOBAL, int, WSAGetLastError, (void));
|
||||||
extern int (WINAPI *p_WSAEnumNetworkEvents)
|
DECL_WINDOWS_FUNCTION(GLOBAL, int, WSAEnumNetworkEvents,
|
||||||
(SOCKET s, WSAEVENT hEventObject, LPWSANETWORKEVENTS lpNetworkEvents);
|
(SOCKET, WSAEVENT, LPWSANETWORKEVENTS));
|
||||||
|
|
||||||
extern int socket_writable(SOCKET skt);
|
extern int socket_writable(SOCKET skt);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user