diff options
author | David <david@xagasoft.com> | 2009-01-14 20:05:02 +0000 |
---|---|---|
committer | David <david@xagasoft.com> | 2009-01-14 20:05:02 +0000 |
commit | 3ee5204eb254e914d695a37fede11c8599415fa9 (patch) | |
tree | 26b92fba438d16a0d2e896f92f106125e04abf94 | |
parent | e771f7c48d38d1c1481b9904d17ed7989d6cd579 (diff) | |
download | libbu++-3ee5204eb254e914d695a37fede11c8599415fa9.tar.gz libbu++-3ee5204eb254e914d695a37fede11c8599415fa9.tar.bz2 libbu++-3ee5204eb254e914d695a37fede11c8599415fa9.tar.xz libbu++-3ee5204eb254e914d695a37fede11c8599415fa9.zip |
david - added getaddrinfo and freeaddrinfo
-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, |