Properly format IPv6 addresses.

This commit is contained in:
Sasikantha Babu 2012-01-09 00:03:23 +01:00 committed by Giuseppe Scrivano
parent c2ee928302
commit 5e1badae1e
4 changed files with 51 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2012-01-09 Sasikantha Babu <sasikanth.v19@gmail.com> (tiny change)
* connect.c (connect_to_ip): properly formatted ipv6 address display.
(socket_family): New function - returns socket family type.
* http.c (gethttp): properly formatted ipv6 address display.
2011-11-09 Gijs van Tulder <address@hidden>
* warc.c: Call gzdopen() with wb9 instead of wb+9, which fails on

View File

@ -298,7 +298,12 @@ connect_to_ip (const ip_address *ip, int port, const char *print)
xfree (str);
}
else
logprintf (LOG_VERBOSE, _("Connecting to %s:%d... "), txt_addr, port);
{
if (ip->family == AF_INET)
logprintf (LOG_VERBOSE, _("Connecting to %s:%d... "), txt_addr, port);
else if (ip->family == AF_INET6)
logprintf (LOG_VERBOSE, _("Connecting to [%s]:%d... "), txt_addr, port);
}
}
/* Store the sockaddr info to SA. */
@ -586,6 +591,36 @@ socket_ip_address (int sock, ip_address *ip, int endpoint)
}
}
/* Get the socket family of connection on FD and store
Return family type on success, -1 otherwise.
If ENDPOINT is ENDPOINT_LOCAL, it returns the sock family of the local
(client) side of the socket. Else if ENDPOINT is ENDPOINT_PEER, it
returns the sock family of the remote (peer's) side of the socket. */
int
socket_family (int sock, int endpoint)
{
struct sockaddr_storage storage;
struct sockaddr *sockaddr = (struct sockaddr *) &storage;
socklen_t addrlen = sizeof (storage);
int ret;
memset (sockaddr, 0, addrlen);
if (endpoint == ENDPOINT_LOCAL)
ret = getsockname (sock, sockaddr, &addrlen);
else if (endpoint == ENDPOINT_PEER)
ret = getpeername (sock, sockaddr, &addrlen);
else
abort ();
if (ret < 0)
return -1;
return sockaddr->sa_family;
}
/* Return true if the error from the connect code can be considered
retryable. Wget normally retries after errors, but the exception
are the "unsupported protocol" type errors (possible on IPv4/IPv6

View File

@ -51,6 +51,7 @@ enum {
ENDPOINT_PEER
};
bool socket_ip_address (int, ip_address *, int);
int socket_family (int sock, int endpoint);
bool retryable_socket_connect_error (int);

View File

@ -1951,11 +1951,17 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy,
#endif
&host_lookup_failed))
{
int family = socket_family (pconn.socket, ENDPOINT_PEER);
sock = pconn.socket;
using_ssl = pconn.ssl;
logprintf (LOG_VERBOSE, _("Reusing existing connection to %s:%d.\n"),
quotearg_style (escape_quoting_style, pconn.host),
pconn.port);
if (family == AF_INET6)
logprintf (LOG_VERBOSE, _("Reusing existing connection to [%s]:%d.\n"),
quotearg_style (escape_quoting_style, pconn.host),
pconn.port);
else
logprintf (LOG_VERBOSE, _("Reusing existing connection to %s:%d.\n"),
quotearg_style (escape_quoting_style, pconn.host),
pconn.port);
DEBUGP (("Reusing fd %d.\n", sock));
if (pconn.authorized)
/* If the connection is already authorized, the "Basic"