From f7a0254e63ee842fc4bda49e19163ebff1f39030 Mon Sep 17 00:00:00 2001 From: David Shaw Date: Tue, 1 Feb 2005 20:55:35 +0000 Subject: [PATCH] * http.c (connect_server): Fix fd leak when connecting to a round-robin server set that has some down servers. Noted by Phil Pennock. --- util/ChangeLog | 6 ++++++ util/http.c | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/util/ChangeLog b/util/ChangeLog index 11fc41b8d..15bfbde80 100644 --- a/util/ChangeLog +++ b/util/ChangeLog @@ -1,3 +1,9 @@ +2005-02-01 David Shaw + + * http.c (connect_server): Fix fd leak when connecting to a + round-robin server set that has some down servers. Noted by Phil + Pennock. + 2005-01-20 Werner Koch * simple-gettext.c (set_gettext_file): Use MO files depending on diff --git a/util/http.c b/util/http.c index 5b9a53d7e..989abd150 100644 --- a/util/http.c +++ b/util/http.c @@ -859,6 +859,8 @@ connect_server( const char *server, ushort port, unsigned int flags, connected=1; break; } + + sock_close(sock); } freeaddrinfo(res); @@ -880,6 +882,8 @@ connect_server( const char *server, ushort port, unsigned int flags, if((host=gethostbyname(srvlist[srv].target))==NULL) continue; + hostfound=1; + if((sock=socket(host->h_addrtype,SOCK_STREAM,0))==-1) { log_error("error creating socket: %s\n",strerror(errno)); @@ -917,6 +921,8 @@ connect_server( const char *server, ushort port, unsigned int flags, if(host->h_addr_list[i]) break; + + sock_close(sock); } #endif /* !HAVE_GETADDRINFO */ @@ -930,13 +936,15 @@ connect_server( const char *server, ushort port, unsigned int flags, else log_error("%s: Host not found: ec=%d\n",server,(int)WSAGetLastError()); #else + int err=errno; if(hostfound) - log_error("%s: %s\n",server,strerror(errno)); + log_error("%s: %s\n",server,strerror(err)); else log_error("%s: Host not found\n",server); #endif if(sock!=-1) sock_close(sock); + errno=err; return -1; }