Fix verbosconnect() when ipv6-enabled to not assume that conn->serv_addr

is a valid pointer, but instead always depend on the passed-in dns pointer.
This happens to be NULL when the connection is re-used...
This commit is contained in:
Daniel Stenberg 2004-02-16 13:14:55 +00:00
Родитель 8415b4a271
Коммит 39926181ea
1 изменённых файлов: 22 добавлений и 12 удалений

Просмотреть файл

@ -1849,26 +1849,36 @@ static void verboseconnect(struct connectdata *conn,
/* Figure out the ip-number and display the first host name it shows: */
#ifdef ENABLE_IPV6
(void)dns; /* not used in the IPv6 enabled version */
{
char hbuf[NI_MAXHOST];
#ifdef NI_WITHSCOPEID
const int niflags = NI_NUMERICHOST | NI_WITHSCOPEID;
#define NIFLAGS NI_NUMERICHOST | NI_WITHSCOPEID
#else
const int niflags = NI_NUMERICHOST;
#define NIFLAGS NI_NUMERICHOST
#endif
struct addrinfo *ai = conn->serv_addr;
if(dns) {
struct addrinfo *ai = dns->addr;
if (getnameinfo(ai->ai_addr, ai->ai_addrlen, hbuf, sizeof(hbuf), NULL, 0,
niflags)) {
snprintf(hbuf, sizeof(hbuf), "?");
/* Lookup the name of the given address. This should probably be remade
to use the DNS cache instead, as the host name is most likely cached
already. */
if (getnameinfo(ai->ai_addr, ai->ai_addrlen, hbuf, sizeof(hbuf), NULL, 0,
NIFLAGS)) {
snprintf(hbuf, sizeof(hbuf), "unknown");
}
else {
if (ai->ai_canonname) {
infof(data, "Connected to %s (%s) port %d\n", ai->ai_canonname, hbuf,
conn->port);
return;
}
}
}
if (ai->ai_canonname) {
infof(data, "Connected to %s (%s) port %d\n", ai->ai_canonname, hbuf,
conn->port);
} else {
infof(data, "Connected to %s port %d\n", hbuf, conn->port);
else {
snprintf(hbuf, sizeof(hbuf), "same host");
}
infof(data, "Connected to %s port %d\n", hbuf, conn->port);
}
#else
{