in regress/netcat.c [1380:1411]
int socks_connect(const char *, const char *, struct addrinfo,
const char *, const char *, struct addrinfo, int,
const char *);
static int
decode_addrport(const char *h, const char *p, struct sockaddr *addr,
socklen_t addrlen, int v4only, int numeric)
{
int r;
struct addrinfo hints, *res;
bzero(&hints, sizeof(hints));
hints.ai_family = v4only ? PF_INET : PF_UNSPEC;
hints.ai_flags = numeric ? AI_NUMERICHOST : 0;
hints.ai_socktype = SOCK_STREAM;
r = getaddrinfo(h, p, &hints, &res);
/* Don't fatal when attempting to convert a numeric address */
if (r != 0) {
if (!numeric) {
errx(1, "getaddrinfo(\"%.64s\", \"%.64s\"): %s", h, p,
gai_strerror(r));
}
return (-1);
}
if (addrlen < res->ai_addrlen) {
freeaddrinfo(res);
errx(1, "internal error: addrlen < res->ai_addrlen");
}
memcpy(addr, res->ai_addr, res->ai_addrlen);
freeaddrinfo(res);
return (0);
}