Index: dll/win32/ws2_32/misc/ns.c =================================================================== --- dll/win32/ws2_32/misc/ns.c (revision 35094) +++ dll/win32/ws2_32/misc/ns.c (working copy) @@ -1407,28 +1407,33 @@ if (!WSAINITIALIZED) return WSANOTINITIALISED; - /* converting port number */ - port = strtoul(servname, NULL, 10); - /* service name was specified? */ - if (port == 0) + if (servname) { - /* protocol was specified? */ - if (hints && hints->ai_protocol) + /* converting port number */ + port = strtoul(servname, NULL, 10); + /* service name was specified? */ + if (port == 0) { - pent = getprotobynumber(hints->ai_protocol); - if (pent == NULL) - return WSAEINVAL; - proto = pent->p_name; + /* protocol was specified? */ + if (hints && hints->ai_protocol) + { + pent = getprotobynumber(hints->ai_protocol); + if (pent == NULL) + return WSAEINVAL; + proto = pent->p_name; + } + else + proto = NULL; + se = getservbyname(servname, proto); + if (se == NULL) + return WSATYPE_NOT_FOUND; + port = se->s_port; } else - proto = NULL; - se = getservbyname(servname, proto); - if (se == NULL) - return WSAHOST_NOT_FOUND; - port = se->s_port; + port = htons(port); } else - port = htons(port); + port = 0; if (nodename) {