Socket timeout not working with libUrl
Alex Tweedly
alex at tweedly.net
Mon Jan 31 21:09:12 EST 2005
Sarah Reichelt wrote:
>> 2) If I open the socket with a domain address, e.g.
>> www.webphotospro.com, Mac OS X does a DNS lookup, puts up the rainbow
>> rotating color cursor, and hangs until the DNS lookup fails. On my
>> machine this takes 60 seconds (apparently it's dependent on how many
>> dns servers you have listed).
>
>
> What happens if you try:
> hostNameToAddress("www.webphotospro.com")
> and use the result of that as the address for opening the socket?
> In my tests, this takes about 4 seconds the first time it is called if
> I am connected (which is long enough for the SPOD to appear). When I
> am disconnected, it fails instantly and return empty.
It depends how you are connected.
If you do it on a machine directly connected to the Internet (e.g. my
laptop dialled into my ISP), then it will fail immediately (because it
knows the DNS server (obtained in this case by PPP negotiation) is
unreachable).
If you do this on a host which is connected to a LAN and (has been)
using a router attached to the LAN to connect, and the router (and/or
NAT box) has been configured (e.g. through DHCP) as the DNS server for
the host, and the router has lost its Internet connection, THEN it will
block for 15-120 seconds before failing. (example - my laptop, connected
through another PG running Win Internet Connection Sharing to a dial-up
line).
{Note - if you're testing this, remember the address will be kept in the
router's DNS resolver cache, so after any successful attempt, you need
to either wait or change the host name you are looking up - that just
caught me out when I tried this in preparation to send this email :-].
No doubt there are other circumstances where it would similarly fail
(e.g. maybe the case of a router hop between the host and the DNS
router/server, and the router-to-router link was down - but I haven't
test that one yet; it would depend on whether the intermediate router
was proxying DHCP or sub-leasing - and I suspect there are too many
variants to be worth getting into them).
The engine can't return a response to the hostnametoaddress query until
it gets a response from the DNS server (or the query times out), so it
simply blocks until the time-out. That's probably reasonable (or at
least unavoidable) for a blocking call like hostNameToAddress, but there
needs to be a non-blocking version of it, for use in non-blocking libURL
and any other action which is not user-triggered (or even to make the
user-interruptable).
-- Alex.
--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.300 / Virus Database: 265.7.6 - Release Date: 27/01/2005
More information about the use-livecode
mailing list