40 #include <netinet/in.h>
41 #include <arpa/inet.h>
42 #include <sys/socket.h>
62 const char *myname =
"inet_addr_host";
64 struct addrinfo *res0;
70 int initial_count = addr_list->
used;
84 }
else if (*hostname ==
'['
85 && hostname[(hostnamelen = strlen(hostname)) - 1] ==
']') {
86 hname =
mystrndup(hostname + 1, hostnamelen - 2);
95 for (res = res0; res; res = res->ai_next) {
100 if (strchr((
char *) proto_info->
sa_family_list, res->ai_family) == 0) {
101 msg_info(
"%s: skipping address family %d for host \"%s\"",
102 myname, res->ai_family, hostname);
112 if ((sock = socket(res->ai_family, SOCK_STREAM, 0)) < 0) {
113 msg_warn(
"%s: skipping address family %d: %m",
114 myname, res->ai_family);
118 msg_warn(
"%s: close socket: %m", myname);
124 if (hname && hname != hostname)
127 return (addr_list->
used - initial_count);
137 int main(
int argc,
char **argv)
140 struct sockaddr_storage *sa;
147 msg_fatal(
"usage: %s protocols hostname...", argv[0]);
152 while (--argc && *++argv) {
void freeaddrinfo(struct addrinfo *ai)
void inet_addr_list_free(INET_ADDR_LIST *list)
#define inet_proto_info()
int main(int argc, char **argv)
INET_PROTO_INFO * inet_proto_init(const char *context, const char *protocols)
#define hostname_to_sockaddr(host, serv, sock, res)
struct sockaddr_storage * addrs
#define SOCKADDR_TO_HOSTADDR(sa, salen, host, port, sock)
char buf[MAI_HOSTADDR_STRSIZE]
VSTREAM * vstream_printf(const char *fmt,...)
#define SOCK_ADDR_PTR(ptr)
void msg_warn(const char *fmt,...)
unsigned char * sa_family_list
void inet_addr_list_init(INET_ADDR_LIST *list)
NORETURN msg_fatal(const char *fmt,...)
int vstream_fflush(VSTREAM *stream)
void inet_addr_list_append(INET_ADDR_LIST *list, struct sockaddr *addr)
char * mystrndup(const char *str, ssize_t len)
#define SOCK_ADDR_LEN(sa)
int inet_addr_host(INET_ADDR_LIST *addr_list, const char *hostname)
void msg_vstream_init(const char *name, VSTREAM *vp)
void msg_info(const char *fmt,...)