This is the mail archive of the
cygwin@cygwin.com
mailing list for the Cygwin project.
Re: gethostbyname thread-safe?
- From: Igor Pechtchanski <pechtcha at cs dot nyu dot edu>
- To: Ajay Nerurkar <ajaynerurkar at yahoo dot com>
- Cc: cygwin at cygwin dot com
- Date: Mon, 10 Feb 2003 21:36:53 -0500 (EST)
- Subject: Re: gethostbyname thread-safe?
- Reply-to: cygwin at cygwin dot com
On Mon, 10 Feb 2003, Ajay Nerurkar wrote:
> Is Cygwin's gethostbyname thread-safe? From a web search I got the
> impression that it wasn't and also that Cygwin does not have its
> reentrant version gethostbyname_r. So, what does one do?
>
> Ajay
Ajay,
Looking at the code (src/winsup/cygwin/net.cc),
964:#ifdef _MT_SAFE
965:#define hostent_buf _reent_winsup ()->_hostent_buf
966:#else
967:static struct hostent *hostent_buf = NULL;
968:#endif
969:
970:/* exported as gethostbyname: standards? */
971:extern "C" struct hostent *
972:cygwin_gethostbyname (const char *name)
you can see that there is a provision for reentrancy. However,
src/winsup/cygwin/acconfig.h #undef's _MT_SAFE. OpenGroup's specification
(<http://www.opengroup.org/onlinepubs/007904975/functions/gethostbyaddr.html>)
says that "The gethostbyname() function need not be reentrant."
See <http://wcug.wwu.edu/lists/ipng/199710/msg00002.html> for a good
discussion of gethostbyname() thread-safety issues.
So, your choices for the moment are:
1) build a thread-safe cygwin1.dll for your own use
2) make sure gethostbyname() is only called (and its result used/copied)
by one thread at a time (using a mutex, for example)
3) implement gethostby{name,addr}_r() yourself and submit a patch
Hope this helps,
Igor
--
http://cs.nyu.edu/~pechtcha/
|\ _,,,---,,_ pechtcha@cs.nyu.edu
ZZZzz /,`.-'`' -. ;-;;,_ igor@watson.ibm.com
|,4- ) )-,_. ,\ ( `'-' Igor Pechtchanski
'---''(_/--' `-'\_) fL a.k.a JaguaR-R-R-r-r-r-.-.-. Meow!
Oh, boy, virtual memory! Now I'm gonna make myself a really *big* RAMdisk!
-- /usr/games/fortune
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/