1 /* $Id: sockaddr.c 5381 2002-03-31 22:35:47Z rra $
3 ** Routines for manipulating sockaddr structs
8 #include "portable/socket.h"
13 char *sprint_sockaddr(const struct sockaddr *sa)
16 static char buff[256];
17 const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *) sa;
20 if (sa->sa_family == AF_INET6 && IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) {
21 struct sockaddr_in sin;
22 memcpy(&sin.sin_addr, sin6->sin6_addr.s6_addr + 12,
24 sin.sin_port = sin6->sin6_port;
25 sin.sin_family = AF_INET;
26 #ifdef HAVE_SOCKADDR_LEN
27 sin.sin_len = sizeof(struct sockaddr_in);
29 return inet_ntoa(sin.sin_addr);
31 getnameinfo(sa, SA_LEN(sa), buff, sizeof buff, NULL, 0, NI_NUMERICHOST);
35 return inet_ntoa(((const struct sockaddr_in *)sa)->sin_addr);
39 void make_sin(struct sockaddr_in *s, const struct in_addr *src)
41 memset(s, 0, sizeof( struct sockaddr_in ));
42 s->sin_family = AF_INET;
43 #ifdef HAVE_SOCKADDR_LEN
44 s->sin_len = sizeof( struct sockaddr_in );