X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=servport.c;h=a775c9c93f2562070be1d4a5da2bb07145b25c28;hb=98cfcef26048bba06975e68a1aad05a8bac0d65d;hp=171eb53f6352ca1d8500252fb49c70c6d279f718;hpb=2502b11c42dd0a19715723c102c52713ef8ad351;p=~andy%2Ffetchmail diff --git a/servport.c b/servport.c index 171eb53f..a775c9c9 100644 --- a/servport.c +++ b/servport.c @@ -1,29 +1,25 @@ /** \file servport.c Resolve service name to port number. * \author Matthias Andree - * \date 2005 + * \date 2005 - 2006 * * Copyright (C) 2005 by Matthias Andree * For license terms, see the file COPYING in this directory. */ #include "fetchmail.h" #include "getaddrinfo.h" -#include "i18n.h" +#include "gettext.h" #include #include #include #include #include -#if defined(HAVE_NETINET_IN_H) #include -#endif -#ifdef HAVE_ARPA_INET_H #include -#endif #include int servport(const char *service) { - int port; + int port, e; unsigned long u; char *end; @@ -47,20 +43,27 @@ int servport(const char *service) { memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - if (getaddrinfo(NULL, service, &hints, &res)) { + hints.ai_protocol = IPPROTO_TCP; + e = fm_getaddrinfo(NULL, service, &hints, &res); + if (e) { + report(stderr, GT_("getaddrinfo(NULL, \"%s\") error: %s\n"), + service, gai_strerror(e)); goto err; } else { switch(res->ai_addr->sa_family) { case AF_INET: port = ntohs(((struct sockaddr_in *)res->ai_addr)->sin_port); + break; #ifdef AF_INET6 case AF_INET6: port = ntohs(((struct sockaddr_in6 *)res->ai_addr)->sin6_port); + break; #endif default: + fm_freeaddrinfo(res); goto err; } - freeaddrinfo(res); + fm_freeaddrinfo(res); } } else { if (u == 0 || u > 65535)