#include "wx/private/socket.h"
#include "wx/private/sckaddr.h"
+#include <errno.h>
+
#ifdef __UNIX__
#include <netdb.h>
#include <arpa/inet.h>
// ============================================================================
// TODO: use POSIX getaddrinfo() (also available in Winsock 2) for simplicity
-// and IPv6 support
+// and to use the same code for IPv4 and IPv6 support
#ifdef __WXMSW__
#define HAVE_INET_ADDR
// under MSW getxxxbyname() functions are MT-safe (but not reentrant) so
// we don't need to serialize calls to them
#define wxHAS_MT_SAFE_GETBY_FUNCS
+
+ #if wxUSE_IPV6
+ // this header does dynamic dispatching of getaddrinfo/freeaddrinfo()
+ // by implementing them in its own code if the system versions are not
+ // available (as is the case for anything < XP)
+ //
+ // NB: if this is not available for the other compilers (so far tested
+ // with MSVC only) we should just use wxDynamicLibrary "manually"
+ #ifdef __VISUALC__
+ // disable a warning occurring in Microsoft own version of this file
+ #pragma warning(disable:4706)
+ #endif
+ #include <wspiapi.h>
+ #ifdef __VISUALC__
+ #pragma warning(default:4706)
+ #endif
+ #endif
#endif // __WXMSW__
// we assume that we have gethostbyaddr_r() if and only if we have
#endif
// the _r functions need the extra buffer parameter but unfortunately its type
-// differs between different systems
+// differs between different systems and for the systems which use opaque
+// structs for it (at least AIX and OpenBSD) it must be zero-filled before
+// being passed to the system functions
#ifdef HAVE_FUNC_GETHOSTBYNAME_R_3
- typedef hostent_data wxGethostBuf;
+ struct wxGethostBuf : hostent_data
+ {
+ wxGethostBuf()
+ {
+ memset(this, 0, sizeof(hostent_data));
+ }
+ };
#else
typedef char wxGethostBuf[1024];
#endif
#ifdef HAVE_FUNC_GETSERVBYNAME_R_3
- typedef servent_data wxGetservBuf;
+ struct wxGetservBuf : servent_data
+ {
+ wxGethostBuf()
+ {
+ memset(this, 0, sizeof(servent_data));
+ }
+ };
#else
typedef char wxGetservBuf[1024];
#endif