X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fnetwork%2Fgetaddrinfo.c;h=9df045f6ba0fb6078f92090dab10b274f2b9c552;hb=d32dadd60efb9d3b255351a3b532f8e4c3dd0db1;hp=e33bfa28aaaa4d2d2bfd6bb5798ed37fea480ad2;hpb=f381c118b2d4f7d914481d3cdc830ce41369b002;p=musl diff --git a/src/network/getaddrinfo.c b/src/network/getaddrinfo.c index e33bfa28..9df045f6 100644 --- a/src/network/getaddrinfo.c +++ b/src/network/getaddrinfo.c @@ -16,13 +16,7 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru char canon[256], *outcanon; int nservs, naddrs, nais, canon_len, i, j, k; int family = AF_UNSPEC, flags = 0, proto = 0, socktype = 0; - struct aibuf { - struct addrinfo ai; - union sa { - struct sockaddr_in sin; - struct sockaddr_in6 sin6; - } sa; - } *out; + struct aibuf *out; if (!host && !serv) return EAI_NONAME; @@ -72,9 +66,11 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru pthread_setcancelstate( PTHREAD_CANCEL_DISABLE, &cs); int r = connect(s, ta[i], tl[i]); + int saved_errno = errno; pthread_setcancelstate(cs, 0); close(s); if (!r) continue; + errno = saved_errno; } switch (errno) { case EADDRNOTAVAIL: @@ -110,6 +106,7 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru } for (k=i=0; iai; return 0; }