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

Raimo Niskanen <>
Fri Oct 23 15:56:03 CEST 2009


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



On Wed, Oct 21, 2009 at 02:28:04PM +0200, Raimo Niskanen wrote:
> On Wed, Oct 21, 2009 at 11:57:18AM +0200, info wrote:
> > Dear Raimo,
> > This night ... I am a little bit tired ... I tested according to your plan. I found again in my archive the comodo exe. Ouf !
> > This is the result:
> > Test #1
> > uninstall Comodo
> > restart
> > inet:gethostbyname ok
> > uninstall erlang
> > install Comodo
> > install erlang with windows runtime
> > inet:gethostbyname ko
> > Test #2
> > uninstall erlang
> > uninstall Commodo
> > restart
> > install erlang with windows runtime
> > inet:gethostbyname ok
> > install Comodo
> > restart
> > inet:gethostbyname ko
> 
> And with "ko" you mean "knock out", I guess...
> 
> > 
> > On Tue, Oct 20, 2009 at 06:45:25PM +0200, info wrote:
> > > 
> > > On Tue, 20 Oct 2009 11:33:35 +0200 info wrote:
> > >  > I uninstalled Comodo and ... the problem disappeared !!!!!!!!!!!!!!!!!!!!!
> > >  > What else now ?
> > >  > John
> > > 
> > > Then we know it is firewall related. And we could not
> > > reproduce it with Comodo. Some more tiny detail seems
> > > to be needed to trigger the bug. Which version of Comodo
> > > do you have?
> > > 
> > > I had the version 2.4.19.185 ..
> > > I had because I didn't keep the exe :-( and the version 3 is not compatible with windows 2003
> > > I am "naked" since yesterday !
> > 
> > We tried Comodo Firewall 3.12, and it seems to work just fine.
> > I.e on Windows 2003 R2 Enterprise Edition with SP2.
> > The features of the product give a no support of windows 2003 !?
> > I have windows 2003 sbs with sp2
> 
> I read in the Comodo forums that up to at least 3.10 it refused
> to install saying "OS not supported". If so you could suspect
> 3.12 kind of supports Windows 2003...
> 
> I have located 2.4.19.184 on the Internet, we will
> try it and hope the difference to 2.4.19.185 does
> not matter...
> 
> > 
> > > 
> > > Reinstall and see if the problem appears again, but first
> > > uninstall Erlang. Installation order may matter to trigger
> > > the bug. Uninstall both Erlang and Comodo and try
> > > installing Comodo first then Erlang. If that fails
> > > uninstall Erlang then Comodo (latest first), and install Erlang
> > > first then Comodo (the other order). Watch out the next
> > > paragraph about installing Erlang.
> > > 
> > > On Tue, 20 Oct 2009 11:33:52 +0200 info wrote:
> > >  > OK, I found several versions in WinSxS.
> > >  > Which one is the good one ?
> > >  > Shall I copy it in system32 ?
> > > 
> > > No, uninstall Erlang, and reinstall it. Make sure to
> > > select the approx."Install Microsoft Runtime" in the
> > > installer. The installer installs it into a for
> > > Erlang unique location so Erlang will run exactly
> > > the runtime library it needs. Do not move it!
> > > 
> > > 
> > > We are now hunting something fishy (for Robert R) with
> > > IIS server and firewall client. Can you (info) tell us
> > > what happens when you have the symptoms, if you in
> > > a freshly started Erlang node only look up a
> > > short name e.g "localhost", because we now have
> > > a situation where it kind of works until we do
> > > a lookup containing a dot which hangs and after
> > > that everything hangs. Can you confirm this peculiar
> > > behaviour?
> > > 
> > > / Raimo
> > > 
> > > 
> > > 
> > > On Mon, Oct 19, 2009 at 11:53:07PM +0200, info wrote:
> > >  > And what about msvcr80.dll which is missing in my server ?
> > >  > 
> > >  > On Sat, Oct 17, 2009 at 12:46:50AM +0100, info wrote:
> > >  >   > On Fri, Oct 16, 2009 at 04:29:20PM +0200, info wrote:
> > >  >   > I guess Robby wrote:
> > >  >   >    > On Thu, Oct 15, 2009 at 4:28 PM, Raimo Niskanen      <
> > >  >   >    >      <raimo%     >
> > >  >   >    >     > wrote:
> > >  >   >    > 
> > >  >   >    >     > On Thu, Oct 15, 2009 at 03:02:40PM +0200, info wrote:
> > >  >   >    >     >      > Dear Raimo,
> > >  >   >    >     >      > I can resume: I discovered that gethostbyname call inet_gethost.c
> > >  >   >    >     >      > I don't understand inet_gethost.c :-(
> > >  >   >    >     >      > Where "goes" this problem for finding the information ?
> > >  >   >    >     >      > If we know where and what, we could perhaps find what is missing in my
> > >  >   >    >     > windows 2003 ...
> > >  >   >    >     >      > Hope to read you soon !
> > >  >   >    >     >      > John
> > >  >   >    >     >
> > >  >   >    >     > Well, there is not much more to say. inet_gethost.c calls
> > >  >   >    >     > struct hostent *gethostbyname(const char *name) in the
> > >  >   >    >     > winsock2 library:
> > >  >   >    >     >  http://msdn.microsoft.com/en-us/library/ms738524(VS.85).aspx     <http://msdn.microsoft.com/en-us/library/ms738524%28VS.85%29.aspx     >
> > >  >   >    >     > It never returns.
> > >  >   >    >     > It is deprecated but that does not mean broken.
> > >  >   >    >     > I have a Windows 2003 server that it works on.
> > >  >   >    >     > We have not found the reason it differs between
> > >  >   >    >     > my server and your server.
> > >  >   >    >     > And that is about it.
> > >  >   >    >     >
> > >  >   >    >     >
> > >  >   >    >     >
> > >  >   >    > I can consistently reproduce the hanging gethostbyname() in inet_gethost.exe
> > >  >   >    > on Windows 2003 when I have the 'Microsoft Firewall Client for ISA Server
> > >  >   >    > Version 4.0' installed. This is a specific add-on, nothing to do with
> > >  >   >    > Microsoft Firewall in your Network Properties.
> > >  >   >    > 
> > >  >   > 
> > >  >   > I guess info wrote:
> > >  >   >    > but I don't use ISA server !!!
> > >  >   >    > 
> > >  >   > 
> > >  >   > No other interesting firewall software?
> > >  >   > Yes: I am using Comodo.
> > >  > 
> > >  > Can you try to uninstall Comodo and see if the problem disappears.
> > >  > If so we know where to look for the problem.
> > >  > (We have installed a 2003 server with Comodo and got no problems,
> > >  >  other than the possibility to do configuration errors that
> > >  >  would cause your symptoms)
> > >  > 
> > >  >   > 
> > >  >   > I guess Robby wrote:
> > >  >   >    > If I remove it, it works fine, if I add it it hangs. Apart from that the
> > >  >   >    > W2003 build is as vanilla as it gets.
> > >  >   >    > 
> > >  >   >    > Nothing much to go on, but I would not be surprised if some system DLL is
> > >  >   >    > getting in the way. This is very hard to diagnose.
> > >  >   >    > 
> > >  >   >    > One day I'll get around to compiling inet_gethost.exe in my setup, just to
> > >  >   >    > rule out poor linkage due to the VC++ setup used to build the shipping
> > >  >   >    > executables. If I compile up a trivial gethostbyname() example from MSDN, it
> > >  >   >    > works OK in all circumstances.
> > >  >   >    > 
> > >  >   >    > There are a few strange dependencies in other shipped Windows files, for
> > >  >   >    > example beam.dll seems to depend on a particular MSVCR80.DLL with the
> > >  >   >    > version 8.0.50727.1433 . And if you have an older Windows machine, you get
> > >  >   >    > the completely unhelpful popup box telling you that your program could not
> > >  >   >    > be run. This has something to do with Windows Side-by-Side DLL deployment,
> > >  >   >    > and I completely fail to grasp what that's all about.
> > >  >   >    > 
> > >  >   > 
> > >  >   > I guess info wrote:
> > >  >   >    > but I don't have msvcr80.dll !!!
> > >  >   > 
> > >  >   > I guess you do, actually, since Erlang/OTP's installer is supposed
> > >  >   > to install that DLL, if it does not exist already.
> > >  >   > 
> > >  >   > I guess Robby wrote:
> > >  >   >    > 
> > >  >   >    > Robby
> > >  >   > 
> > >  >   > -- 
> > >  >   > 
> > >  >   > / Raimo Niskanen, Erlang/OTP, Ericsson AB
> > >  > 
> > >  > -- 
> > >  > 
> > >  > / Raimo Niskanen, Erlang/OTP, Ericsson AB
> > > 
> > > -- 
> > > 
> > > / Raimo Niskanen, Erlang/OTP, Ericsson AB
> > 
> > -- 
> > 
> > / Raimo Niskanen, Erlang/OTP, Ericsson AB
> 
> -- 
> 
> / Raimo Niskanen, Erlang/OTP, Ericsson AB
> 
> ________________________________________________________________
> erlang-questions mailing list. See http://www.erlang.org/faq.html
> erlang-questions (at) erlang.org

-- 

/ Raimo Niskanen, Erlang/OTP, Ericsson AB


More information about the erlang-questions mailing list