(doit): loop until we create an error socket of an supported socket

family


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@8881 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
2000-08-01 21:10:52 +00:00
parent 8dcb6478aa
commit b227547119

View File

@@ -703,7 +703,7 @@ doit (const char *hostname,
continue; continue;
} }
if (do_errsock) { if (do_errsock) {
struct addrinfo *ea; struct addrinfo *ea, *eai;
struct addrinfo hints; struct addrinfo hints;
memset (&hints, 0, sizeof(hints)); memset (&hints, 0, sizeof(hints));
@@ -712,15 +712,23 @@ doit (const char *hostname,
hints.ai_family = a->ai_family; hints.ai_family = a->ai_family;
hints.ai_flags = AI_PASSIVE; hints.ai_flags = AI_PASSIVE;
error = getaddrinfo (NULL, "0", &hints, &ea); errsock = -1;
error = getaddrinfo (NULL, "0", &hints, &eai);
if (error) if (error)
errx (1, "getaddrinfo: %s", gai_strerror(error)); errx (1, "getaddrinfo: %s", gai_strerror(error));
errsock = socket (ea->ai_family, ea->ai_socktype, ea->ai_protocol); for (ea = eai; ea != NULL; ea = ea->ai_next) {
errsock = socket (ea->ai_family, ea->ai_socktype,
ea->ai_protocol);
if (errsock < 0)
continue;
if (bind (errsock, ea->ai_addr, ea->ai_addrlen) < 0)
err (1, "bind");
break;
}
if (errsock < 0) if (errsock < 0)
err (1, "socket"); err (1, "socket");
if (bind (errsock, ea->ai_addr, ea->ai_addrlen) < 0) freeaddrinfo (eai);
err (1, "bind");
freeaddrinfo (ea);
} else } else
errsock = -1; errsock = -1;