Mercurial > pidgin
changeset 10562:e06da39b467c
[gaim-migrate @ 11942]
This will prevent the connection process from hanging when the DNS lookup fails. We need to call the callback function regardless of whether the lookup succeeded. (This is in the DNS lookup functionality that is currently #ifdef _WIN32, but is actually portable),
committer: Tailor Script <tailor@pidgin.im>
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Tue, 01 Feb 2005 05:02:40 +0000 |
parents | 1db4f49de0c6 |
children | 3e2cd3fe8897 |
files | src/proxy.c |
diffstat | 1 files changed, 16 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/proxy.c Tue Feb 01 04:29:44 2005 +0000 +++ b/src/proxy.c Tue Feb 01 05:02:40 2005 +0000 @@ -651,8 +651,12 @@ static gboolean dns_main_thread_cb(gpointer data) { dns_tdata *td = (dns_tdata*)data; + if (td->errmsg != NULL) { + gaim_debug_info("dns", "%s\n", td->errmsg); + } td->callback(td->hosts, td->data, td->errmsg); g_free(td->hostname); + g_free(td->errmsg); g_free(td); return FALSE; } @@ -662,19 +666,19 @@ dns_tdata *td = (dns_tdata*)data; struct hostent *hp; - if(!(hp = gethostbyname(td->hostname))) { - g_free(td->hostname); - g_free(td); - return 0; - } + if ((hp = gethostbyname(td->hostname))) { + memset(&sin, 0, sizeof(struct sockaddr_in)); + memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length); + sin.sin_family = hp->h_addrtype; + sin.sin_port = htons(td->port); - memset(&sin, 0, sizeof(struct sockaddr_in)); - memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length); - sin.sin_family = hp->h_addrtype; - sin.sin_port = htons(td->port); - - td->hosts = g_slist_append(td->hosts, GINT_TO_POINTER(sizeof(sin))); - td->hosts = g_slist_append(td->hosts, g_memdup(&sin, sizeof(sin))); + td->hosts = g_slist_append(td->hosts, + GINT_TO_POINTER(sizeof(sin))); + td->hosts = g_slist_append(td->hosts, + g_memdup(&sin, sizeof(sin))); + } else { + td->errmsg = g_strdup_printf("DNS error: %d", errno); + } /* back to main thread */ g_idle_add(dns_main_thread_cb, td); return 0;