libcody: Do not use a dummy port number in getaddrinfo().
authorIain Sandoe <iain@sandoe.co.uk>
Sun, 13 Mar 2022 16:29:45 +0000 (16:29 +0000)
committerIain Sandoe <iain@sandoe.co.uk>
Fri, 18 Mar 2022 15:23:23 +0000 (15:23 +0000)
the getaddrinfo() requires either a non-null name for the server or
a port service / number.  In the code that opens a connection we have
been calling this with a dummy port number of "0".  Unfortunately this
triggers a bug in some BSD versions and OSes importing that code.

In this part of the code we do not really need a port number, since it
is not reasonable to open a connection to an unspecified host.

Setting hints info field to 0, and the servname parm to nullptr works
around the BSD bug in this case.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
libcody/ChangeLog:

* netclient.cc (OpenInet6): Do not provide a dummy port number
in the getaddrinfo() call.

libcody/netclient.cc

index 7f81dd9..558808b 100644 (file)
@@ -93,7 +93,7 @@ int OpenInet6 (char const **e, char const *name, int port)
     }
 
   addrinfo hints;
-  hints.ai_flags = AI_NUMERICSERV;
+  hints.ai_flags = 0;
   hints.ai_family = AF_INET6;
   hints.ai_socktype = SOCK_STREAM;
   hints.ai_protocol = 0;
@@ -102,9 +102,7 @@ int OpenInet6 (char const **e, char const *name, int port)
   hints.ai_canonname = nullptr;
   hints.ai_next = nullptr;
 
-  /* getaddrinfo requires a port number, but is quite happy to accept
-     invalid ones.  So don't rely on it.  */
-  if (int err = getaddrinfo (name, "0", &hints, &addrs))
+  if (int err = getaddrinfo (name, nullptr, &hints, &addrs))
     {
       errstr = gai_strerror (err);
       // What's the best errno to set?