53 #include <sys/socket.h>
54 #include <netinet/in.h>
73 static int inet_connect_one(
struct addrinfo *,
int,
int);
82 const char *parse_err;
84 struct addrinfo *res0;
96 if ((parse_err =
host_port(buf, &host,
"localhost", &port, (
char *) 0)) != 0)
99 msg_fatal(
"host/service %s/%s not found: %s",
104 for (sock = -1, found = 0, res = res0; res != 0; res = res->ai_next) {
109 if (strchr((
char *) proto_info->
sa_family_list, res->ai_family) == 0) {
110 msg_info(
"skipping address family %d for host %s",
111 res->ai_family, host);
124 if ((sock = inet_connect_one(res, block_mode, timeout)) < 0) {
138 static int inet_connect_one(
struct addrinfo * res,
int block_mode,
int timeout)
145 sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
160 if (
timed_connect(sock, res->ai_addr, res->ai_addrlen, timeout) < 0) {
174 if (
sane_connect(sock, res->ai_addr, res->ai_addrlen) < 0
175 && errno != EINPROGRESS) {
void freeaddrinfo(struct addrinfo *ai)
char * mystrdup(const char *str)
int sane_connect(int sock, struct sockaddr *sa, SOCKADDR_SIZE len)
#define inet_proto_info()
#define hostname_to_sockaddr(host, serv, sock, res)
#define SOCKADDR_TO_HOSTADDR(sa, salen, host, port, sock)
void set_inet_windowsize(int sock, int windowsize)
char buf[MAI_HOSTADDR_STRSIZE]
int timed_connect(int sock, struct sockaddr *sa, int len, int timeout)
unsigned char * sa_family_list
NORETURN msg_fatal(const char *fmt,...)
int non_blocking(int, int)
const char * host_port(char *buf, char **host, char *def_host, char **port, char *def_service)
int inet_connect(const char *addr, int block_mode, int timeout)
void msg_info(const char *fmt,...)