From: Francois Gouget fgouget@codeweavers.com
--- In my case the libnss-mymachines:i386 package was missing which caused getaddrinfo() to fail with EBUSY because the /etc/nsswitch.conf file contained 'mymachines' as the last entry of the 'hosts:' line (apparently mymachines is meant to help resolve hostnames of local container instances).
In turn this caused these two 32-bit tests to fail: * wsdapi:address when trying to resolve 'not/valid' * ws2_32:protocol when trying to resolve 'nxdomain.codeweavers.com' --- dlls/ws2_32/unixlib.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/dlls/ws2_32/unixlib.c b/dlls/ws2_32/unixlib.c index 0625c5c72ce..cf4f9e3dcdb 100644 --- a/dlls/ws2_32/unixlib.c +++ b/dlls/ws2_32/unixlib.c @@ -102,6 +102,7 @@ #include "ws2_32_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(winsock); +WINE_DECLARE_DEBUG_CHANNEL(winediag);
#ifndef HAVE_LINUX_GETHOSTBYNAME_R_6 static pthread_mutex_t host_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -418,6 +419,8 @@ static int addrinfo_err_from_unix( int err ) case EAI_SERVICE: return WS_EAI_SERVICE; case EAI_SOCKTYPE: return WS_EAI_SOCKTYPE; case EAI_SYSTEM: + if (err == EAI_SYSTEM && errno == EBUSY) + ERR_(winediag)("getaddrinfo() returned EBUSY. You may be missing a libnss plugin\n"); /* some broken versions of glibc return EAI_SYSTEM and set errno to * 0 instead of returning EAI_NONAME */ return errno ? errno_from_unix( errno ) : WS_EAI_NONAME;