Skip to content

Commit

Permalink
sock : Add IPv6 support
Browse files Browse the repository at this point in the history
  • Loading branch information
changeway authored and pasis committed Oct 9, 2015
1 parent f326c2f commit b2a98fb
Showing 1 changed file with 19 additions and 18 deletions.
37 changes: 19 additions & 18 deletions src/sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,31 +85,32 @@ sock_t sock_connect(const char * const host, const unsigned int port)
snprintf(service, 6, "%u", port);

memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_INET;
hints.ai_family = AF_UNSPEC;
hints.ai_flags = AI_ADDRCONFIG;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_socktype = SOCK_STREAM;

if ((err = getaddrinfo(host, service, &hints, &res)) != 0)
return -1;
err = getaddrinfo(host, service, &hints, &res);
if (err != 0)
return -1;

ainfo = res;
while (ainfo) {
if ((sock = socket(ainfo->ai_family, ainfo->ai_socktype,
ainfo->ai_protocol)) >= 0) {
sock_set_nonblocking(sock);
for (ainfo = res; ainfo != NULL; ainfo = ainfo->ai_next) {
sock = socket(ainfo->ai_family, ainfo->ai_socktype, ainfo->ai_protocol);
if (sock < 0)
continue;

err = connect(sock, ainfo->ai_addr, ainfo->ai_addrlen);
err = connect(sock, ainfo->ai_addr, ainfo->ai_addrlen);
if (err < 0) {
close(sock);
continue;
}

if ((err == 0) || (err < 0 && _in_progress(sock_error())))
break;
}

ainfo = ainfo->ai_next;
/* Connection has been established. */
break;
}
freeaddrinfo(res);

if (res) freeaddrinfo(res);

return sock;
return ainfo == NULL ? -1 : sock;
}

int sock_close(const sock_t sock)
Expand Down Expand Up @@ -167,7 +168,7 @@ int sock_connect_error(const sock_t sock)
unsigned len;
char temp;

sa.sa_family = AF_INET;
sa.sa_family = AF_UNSPEC;

len = sizeof(sa);

Expand Down

0 comments on commit b2a98fb

Please sign in to comment.