[erlang-questions] is inet:gethostbyname( IP ) correct?

Robert Raschke rtrlists@REDACTED
Wed Oct 28 12:35:34 CET 2009


Hi Raimo.

On Fri, Oct 23, 2009 at 1:56 PM, Raimo Niskanen <
raimo+erlang-questions@REDACTED<raimo%2Berlang-questions@REDACTED>
> wrote:

> After a week of bug hunting we can confirm this is really
> Microsoft's bug, but we have a workaround.
> (It may be Microsoft's and Comodo's bug, who knows...)
>
> It turns out if you mix overlapped I/O with non-overlapped
> (asyncronous with syncronous) on different pipes, in this
> case the pipe to inet_gethost.exe from erlang was opened
> by erlang as non-overlapped and inet_gethost.exe itself
> used overlapped on all its other sockets and pipes...
>
> ...alright if you mix ... I/O something gets not initialized
> in Microsoft's libs unless you do a gethostname() call
> before going into recv() of commands from erlang (we already
> found this out the hard way) but now also if you had certain
> firewalls installed it was not enough, you had to do
> gethostbyname() calls with longer domain names to
> work around Microsoft's bug.
>
> Since this felt like a way to shaky workaround we found
> another that seems much better: now erlang can open the
> pipe to this specific port program (inet_gethost.exe)
> for overlapped I/O so inet_gethost.exe now uses overlapped
> I/O only. This seems to avoid the bug.
>
> We reproduced the name lookup freeze with Comodo 2.4.19.185
> and Microsoft's Client for ISA Server 4.0. Here is
> a snapshot build (without documentation) that
> does not freeze for neither of these firewalls.
>
> http://www.erlang.org/download/snapshots/otp_win32_R13B03_gethost_fix.exe
>
> Try it and see if it solves your problem.
>
> / Raimo Niskanen
>
>
>
Congratulations! You have a winner.

I have gone through the following tests:

R13B02-1 on W2003, no Firewall Client for ISA
        inet:gethostbyname("localhost").
                OK
        inet:gethostbyname("local machine name").
                OK
        inet:gethostbyname("machinename.localdomain").
                OK
        inet:gethostbyname("www.google.com").
                OK
        inet:gethostbyname("www.cisco.com").
                OK

R13B02-1 on W2003, with Firewall Client for ISA
        inet:gethostbyname("localhost").
                OK
        inet:gethostbyname("local machine name").
                OK
        inet:gethostbyname("machinename.localdomain").
                OK
        inet:gethostbyname("www.google.com").
                timeout
        inet:gethostbyname("www.cisco.com").
                timeout


R13B03_gethost_fix on W2003, no Firewall Client for ISA
        inet:gethostbyname("localhost").
                OK
        inet:gethostbyname("local machine name").
                OK
        inet:gethostbyname("machinename.localdomain").
                OK
        inet:gethostbyname("www.google.com").
                OK
        inet:gethostbyname("www.cisco.com").
                OK

R13B03_gethost_fix on W2003, with Firewall Client for ISA
        inet:gethostbyname("localhost").
                OK
        inet:gethostbyname("local machine name").
                OK
        inet:gethostbyname("machinename.localdomain").
                OK
        inet:gethostbyname("www.google.com").
                OK
        inet:gethostbyname("www.cisco.com").
                OK


Brilliant work for tracking down this obscure behaviour.

Robby


More information about the erlang-questions mailing list