diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/win32_compatibility.cpp | 35 | ||||
| -rw-r--r-- | src/win32_compatibility.h | 5 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/win32_compatibility.cpp b/src/win32_compatibility.cpp index 372dd6c..0ef3abc 100644 --- a/src/win32_compatibility.cpp +++ b/src/win32_compatibility.cpp | |||
| @@ -53,15 +53,19 @@ int DynamicWinsock2::select(int nfds, fd_set *readfds, fd_set *writefds, | |||
| 53 | typedef SOCKET (__cdecl *FNDEF_DYN_socket)(int,int,int); | 53 | typedef SOCKET (__cdecl *FNDEF_DYN_socket)(int,int,int); |
| 54 | SOCKET DynamicWinsock2::socket(int domain, int type, int protocol) | 54 | SOCKET DynamicWinsock2::socket(int domain, int type, int protocol) |
| 55 | { | 55 | { |
| 56 | printf("in win32::socket\n"); | ||
| 56 | SOCKET out = 0; | 57 | SOCKET out = 0; |
| 57 | HINSTANCE Ws2_32 = LoadLibrary(TEXT("Ws2_32")); | 58 | HINSTANCE Ws2_32 = LoadLibrary(TEXT("Ws2_32")); |
| 59 | printf("ws2_32 dll: %08x\n", (int) Ws2_32); | ||
| 58 | if( Ws2_32 != NULL ) | 60 | if( Ws2_32 != NULL ) |
| 59 | { | 61 | { |
| 60 | FNDEF_DYN_socket fn = (FNDEF_DYN_socket) | 62 | FNDEF_DYN_socket fn = (FNDEF_DYN_socket) |
| 61 | GetProcAddress( Ws2_32, "socket" ); | 63 | GetProcAddress( Ws2_32, "socket" ); |
| 64 | printf("socket function pointer: %08x\n", (int)fn); | ||
| 62 | if( fn != NULL ) | 65 | if( fn != NULL ) |
| 63 | out = (fn)( domain, type, protocol ); | 66 | out = (fn)( domain, type, protocol ); |
| 64 | } | 67 | } |
| 68 | printf("win32::socket complete.\n"); | ||
| 65 | return out; | 69 | return out; |
| 66 | } | 70 | } |
| 67 | 71 | ||
| @@ -125,6 +129,37 @@ struct hostent *DynamicWinsock2::gethostbyname(const char *name) | |||
| 125 | return out; | 129 | return out; |
| 126 | } | 130 | } |
| 127 | 131 | ||
| 132 | typedef void (__cdecl *FNDEF_DYN_freeaddrinfo)(struct addrinfo *); | ||
| 133 | void DynamicWinsock2::freeaddrinfo(struct addrinfo *ai) | ||
| 134 | { | ||
| 135 | HINSTANCE Ws2_32 = LoadLibrary(TEXT("Ws2_32")); | ||
| 136 | if( Ws2_32 != NULL ) | ||
| 137 | { | ||
| 138 | FNDEF_DYN_freeaddrinfo fn = (FNDEF_DYN_freeaddrinfo) | ||
| 139 | GetProcAddress( Ws2_32, "freeaddrinfo" ); | ||
| 140 | if( fn != NULL ) | ||
| 141 | (fn)( ai ); | ||
| 142 | } | ||
| 143 | } | ||
| 144 | |||
| 145 | typedef int (__cdecl *FNDEF_DYN_getaddrinfo)( | ||
| 146 | const char*,const char*,const struct addrinfo*,struct addrinfo**); | ||
| 147 | int DynamicWinsock2::getaddrinfo( | ||
| 148 | const char *nodename, const char *servname, | ||
| 149 | const struct addrinfo *hints, struct addrinfo **res ) | ||
| 150 | { | ||
| 151 | int out = 0; | ||
| 152 | HINSTANCE Ws2_32 = LoadLibrary(TEXT("Ws2_32")); | ||
| 153 | if( Ws2_32 != NULL ) | ||
| 154 | { | ||
| 155 | FNDEF_DYN_getaddrinfo fn = (FNDEF_DYN_getaddrinfo) | ||
| 156 | GetProcAddress( Ws2_32, "getaddrinfo" ); | ||
| 157 | if( fn != NULL ) | ||
| 158 | out = (fn)( nodename, servname, hints, res ); | ||
| 159 | } | ||
| 160 | return out; | ||
| 161 | } | ||
| 162 | |||
| 128 | typedef int (__cdecl *FNDEF_DYN_connect)(SOCKET,const struct sockaddr*,int); | 163 | typedef int (__cdecl *FNDEF_DYN_connect)(SOCKET,const struct sockaddr*,int); |
| 129 | int DynamicWinsock2::connect( | 164 | int DynamicWinsock2::connect( |
| 130 | SOCKET s, const struct sockaddr *serv_addr, int addrlen) | 165 | SOCKET s, const struct sockaddr *serv_addr, int addrlen) |
diff --git a/src/win32_compatibility.h b/src/win32_compatibility.h index 7d1f79b..8bf3a00 100644 --- a/src/win32_compatibility.h +++ b/src/win32_compatibility.h | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #ifdef WIN32 | 17 | #ifdef WIN32 |
| 18 | 18 | ||
| 19 | #include <Winsock2.h> | 19 | #include <Winsock2.h> |
| 20 | #include <ws2tcpip.h> | ||
| 20 | #include "fstring.h" | 21 | #include "fstring.h" |
| 21 | 22 | ||
| 22 | #ifndef TEMP_FAILURE_RETRY | 23 | #ifndef TEMP_FAILURE_RETRY |
| @@ -41,6 +42,10 @@ namespace DynamicWinsock2 | |||
| 41 | u_short htons(u_short in); | 42 | u_short htons(u_short in); |
| 42 | u_long htonl(u_long in); | 43 | u_long htonl(u_long in); |
| 43 | struct hostent *gethostbyname(const char *name); | 44 | struct hostent *gethostbyname(const char *name); |
| 45 | void freeaddrinfo(struct addrinfo *ai); | ||
| 46 | int getaddrinfo( | ||
| 47 | const char *nodename, const char *servname, | ||
| 48 | const struct addrinfo *hints, struct addrinfo **res ); | ||
| 44 | int connect(SOCKET s, const struct sockaddr *serv_addr, int addrlen); | 49 | int connect(SOCKET s, const struct sockaddr *serv_addr, int addrlen); |
| 45 | int getpeername(SOCKET s, struct sockaddr *name, int *namelen); | 50 | int getpeername(SOCKET s, struct sockaddr *name, int *namelen); |
| 46 | int setsockopt(SOCKET s, int level, int optname, | 51 | int setsockopt(SOCKET s, int level, int optname, |
