From 25613503cb234a4ee6e7a89bf1b85048e7f72d35 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 28 Oct 2003 13:06:15 +0000 Subject: Another glibc resolve name fix --- lib/hostip.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'lib/hostip.c') diff --git a/lib/hostip.c b/lib/hostip.c index 21227567e..5a7ef2a4c 100644 --- a/lib/hostip.c +++ b/lib/hostip.c @@ -983,13 +983,28 @@ static Curl_addrinfo *my_getaddrinfo(struct connectdata *conn, of buffer size (step_size grows beyond CURL_NAMELOOKUP_SIZE). If anyone has a better fix, please tell us! + + ------------------------------------------------------------------- + + On October 23rd 2003, Dan C dug up more details on the mysteries of + gethostbyname_r() in glibc: + + In glibc 2.2.5 the interface is different (this has also been + discovered in glibc 2.1.1-6 as shipped by Redhat 6). What I can't + explain, is that tests performed on glibc 2.2.4-34 and 2.2.4-32 + (shipped/upgraded by Redhat 7.2) don't show this behavior! + + In this "buggy" version, the return code is -1 on error and 'errno' + is set to the ERANGE or EAGAIN code. Note that 'errno' is not a + thread-safe variable. + */ - if((ERANGE == res) || (EAGAIN == res)) { + if(((ERANGE == res) || (EAGAIN == res)) || + ((res<0) && ((ERANGE == errno) || (EAGAIN == errno)))) step_size+=200; - continue; - } - break; + else + break; } while(step_size <= CURL_NAMELOOKUP_SIZE); if(!h) /* failure */ -- cgit v1.2.3