X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=servport.c;h=0a12c640446b35dfa42e8e1405367db85784be84;hb=a1c85d725fb112c194be2c1e468b4c0cbadd6b86;hp=4d0fe510ed4164e480d1ec6f986c068475cf55c9;hpb=47b40b940159a43557286fdb5ab0db74d4dcc93e;p=~andy%2Ffetchmail diff --git a/servport.c b/servport.c index 4d0fe510..0a12c640 100644 --- a/servport.c +++ b/servport.c @@ -1,6 +1,6 @@ /** \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. @@ -47,7 +47,8 @@ int servport(const char *service) { memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - e = 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)); @@ -56,14 +57,17 @@ int servport(const char *service) { 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)