W3C home > Mailing lists > Public > www-lib@w3.org > January to March 2000

Re: gethostbyname() timeout

From: John Summerfield <summer@OS2.ami.com.au>
Date: Wed, 15 Mar 2000 08:58:35 +0800
Message-Id: <200003150100.JAA26469@emu.os2.ami.com.au>
To: Steinar Bang <sb@metis.no>
cc: www-lib@w3.org, summer@emu.os2.ami.com.au
> This problem is observed both on linux (SuSE 6.2 w./kernel 2.2.10) and 
> Win NT4.
> 
> We have a graphical editor program that uses libwww for HTTP support.
> Every time we try to load a file, we first look in a local cache (the
> application's own cache.  Not the one supplied by libwww), and if the
> file isn't there we try doing an HTTP get to its actual whereabouts.
> 
> So far, so good.
> 
> However, if the machine running the graphical editor is offline, and a 
> file cannot be found in the local cache, the editor freezes up for
> long periods of time.
> 
> The reason is that it is stuck in gethostbyname(), inside
> HTGetHostByName() in HTDNS.c.
> 
> I have cached missing host names outside of libwww, but the GUI freeze 
> caused by that first call to gethostbyname() is big enough that the
> BUG will probably still be counted as unfixed.
> 
> Maybe the timeout period of gethostbyname() can be reduced?  However
> searches on the net has shown me no such options, neither for winsock
> nor linux.
> 
> Maybe one approach to detecting the precense of a connected network
> would be to ping a fixed IP number?  However we may still be connected 
> to a network and reach some machines, with ping to a particular IP
> being blocked by routers or jammed by traffic.
> 
> Any and all ideas are apprciated!

I think the first information you need is the host name being researched. 
On Linux, the strace command will find it. Try something like this:
strace -f -F -o myprog.trace myprog

When the program terminates, view myprog.trace. Note that the host name 
(say www.ibm.com) will not appear as that string; the component parts are 
broken up dp it will look like this excerpt from running nslookup:

11107 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
11107 sendto(4, "\357=\1\0\0\1\0\0\0\0\0\0\3www\3ibm\3com\0\0\1\0\1", 29, 
0, {sin_family=AF_INET
, sin_port=htons(53), sin_addr=inet_addr("192.168.1.6")}, 16) = 29
11107 select(5, [4], NULL, NULL, {5, 0}) = 1 (in [4], left {4, 950000})
11107 recvfrom(4, "\357=\201\200\0\1\0\2\0\6\0\5\3www\3ibm\3com\0\0\1\0\1".
.., 65536, 0, {sin_fa
mily=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.6")}, 
[16]) = 300
11107 close(4)                          = 0


Note: 
strace -f works on RHL 5 but not 6.
I think strace -F does not work on RHL 5; it does on RHL 6
strace -f -F works on both.


-- 
Cheers
John Summerfield
http://os2.ami.com.au/os2/ for OS/2 support.
Configuration, networking, combined IBM ftpsites index.
Received on Wednesday, 15 March 2000 10:03:52 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 23 April 2007 18:18:35 GMT