(inet_ntop) [_WIN32]: Improve the error checking for getnameinfo().

This commit is contained in:
Ron Koenderink 2007-08-24 21:46:32 +00:00
parent 5299580260
commit 2abd68e46e
2 changed files with 28 additions and 22 deletions

View file

@ -322,31 +322,36 @@ posix_socket(int domain, int type, int protocol)
#ifdef HAVE_GETADDRINFO #ifdef HAVE_GETADDRINFO
const char * const char *
inet_ntop(int af, const void *source, char *dest, socklen_t len) inet_ntop(int af, const void *src, char *dst, socklen_t len)
{ {
if (af == AF_INET) struct sockaddr *sa;
{ struct sockaddr_in sin;
struct sockaddr_in in; struct sockaddr_in6 sin6;
memset(&in, 0, sizeof(in)); size_t salen;
in.sin_family = AF_INET;
memcpy(&in.sin_addr, source, sizeof(struct in_addr)); if (af == AF_INET) {
getnameinfo((struct sockaddr *)&in, memset(&sin, 0, sizeof(sin));
sizeof(struct sockaddr_in), dest, len, sin.sin_family = af;
NULL, 0, NI_NUMERICHOST); memcpy(&sin.sin_addr, src, sizeof(sin.sin_addr));
return dest; sa = (struct sockaddr *)&sin;
salen = sizeof(sin);
} else if (af == AF_INET6) {
memset(&sin6, 0, sizeof(sin6));
sin6.sin6_family = af;
memcpy(&sin6.sin6_addr, src, sizeof(sin6.sin6_addr));
sa = (struct sockaddr *)&sin6;
salen = sizeof(sin6);
} else {
errno = EAFNOSUPPORT;
return NULL;
} }
else if (af == AF_INET6)
{ if (getnameinfo(sa, salen, dst, len, NULL, 0, NI_NUMERICHOST)) {
struct sockaddr_in6 in; errno = EAFNOSUPPORT;
memset(&in, 0, sizeof(in)); return NULL;
in.sin6_family = AF_INET6;
memcpy(&in.sin6_addr, source, sizeof(struct in_addr6));
getnameinfo((struct sockaddr *)&in,
sizeof(struct sockaddr_in6), dest, len,
NULL, 0, NI_NUMERICHOST);
return dest;
} }
return NULL;
return dst;
} }
#endif #endif

View file

@ -118,6 +118,7 @@ typedef int socklen_t;
#define F_SETLK 3 #define F_SETLK 3
#define EWOULDBLOCK WSAEWOULDBLOCK #define EWOULDBLOCK WSAEWOULDBLOCK
#define ENOTSOCK WSAENOTSOCK #define ENOTSOCK WSAENOTSOCK
#define EAFNOSUPPORT WSAEAFNOSUPPORT
struct flock struct flock
{ {