> On 29 сент. 2015 г., at 23:06, Willy Tarreau <w...@1wt.eu> wrote: > > On Tue, Sep 29, 2015 at 10:59:15PM +0300, Dmitry Sivachenko wrote: >>> I *think* that getaddrinfo() provides this. You can try to build by >>> adding USE_GETADDRINFO=1 to your makefile. It's not enabled by default >>> because there are numerous bogus implementations on various systems. >>> If it works for you it could be the best solution as other programs >>> which work are likely using it. I don't know if it's safe to enable >>> it by default on FreeBSD. >>> >> >> >> I do have this enabled: >> >> Build options : >> TARGET = freebsd >> CPU = generic >> CC = cc >> CFLAGS = -O2 -pipe -O2 -fno-strict-aliasing -pipe -fstack-protector >> -DFREEBSD_PORTS >> OPTIONS = USE_GETADDRINFO=1 USE_ZLIB=1 USE_OPENSSL=1 USE_STATIC_PCRE=1 >> USE_PCRE_JIT=1 > > Then I have no idea how other programs retrieve the information allowing > them to respect your system-global choices :-(
The following patch fixes the problem for me: --- standard.c.orig 2015-09-30 13:28:52.688425000 +0300 +++ standard.c 2015-09-30 13:29:00.826968000 +0300 @@ -599,7 +599,7 @@ static struct sockaddr_storage *str2ip(c memset(&hints, 0, sizeof(hints)); hints.ai_family = sa->ss_family ? sa->ss_family : AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; - hints.ai_flags = AI_PASSIVE; + hints.ai_flags = 0; hints.ai_protocol = 0; if (getaddrinfo(str, NULL, &hints, &result) == 0) { FreeBSD manual page for getaddrinfo() is uncertain how to treat AI_PASSIVE when hostname parameter is non-NULL (and this parameter is always non-NULL in standard.c:str2ip()). https://www.freebsd.org/cgi/man.cgi?query=getaddrinfo&sektion=3 On Linux manual page explicitly states that "If node is not NULL, then the AI_PASSIVE flag is ignored." So this change should be harmless for Linux. What do you think?