Created
May 6, 2017 12:20
-
-
Save mhinz/7362e3326d111d2b715a7963827fdf36 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void socket_watcher_init(Loop *loop, SocketWatcher *watcher, const char *endpoint, | |
void *data) | |
FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_NONNULL_ARG(2) FUNC_ATTR_NONNULL_ARG(3) | |
{ | |
xstrlcpy(watcher->addr, endpoint, sizeof(watcher->addr)); | |
char *addr = xstrdup(endpoint); | |
char *host_end = strrchr(addr, ':'); | |
if (host_end && addr != host_end) { | |
uv_getaddrinfo_t request; | |
*host_end = '\0'; | |
int retval = uv_getaddrinfo(&loop->uv, &request, NULL, addr, host_end+1, | |
&(struct addrinfo){ | |
.ai_family = AF_UNSPEC, | |
.ai_socktype = SOCK_STREAM, | |
}); | |
if (retval == 0) { | |
struct addrinfo *ai = request.addrinfo; | |
// DEBUG | |
/* void *addr = (ai->ai_family == AF_INET) */ | |
/* ? &((struct sockaddr_in *)ai->ai_addr)->sin_addr */ | |
/* : &((struct sockaddr_in6 *)ai->ai_addr)->sin6_addr; */ | |
/* char canon[INET6_ADDRSTRLEN]; */ | |
/* inet_ntop(ai->ai_family, addr, canon, sizeof(canon)); */ | |
/* ILOG("%s: %s", (ai->ai_family == 2 ? "AF_INET" : */ | |
/* ai->ai_family == 30 ? "AF_INET6" : "AF_WTF"), canon); */ | |
// DEBUG END | |
memcpy(&watcher->uv.tcp.addr, ai->ai_addr, ai->ai_addrlen); | |
uv_tcp_init(&loop->uv, &watcher->uv.tcp.handle); | |
watcher->stream = (uv_stream_t *)&watcher->uv.tcp.handle; | |
freeaddrinfo(request.addrinfo); | |
} | |
} else { | |
uv_pipe_init(&loop->uv, &watcher->uv.pipe.handle, 0); | |
watcher->stream = (uv_stream_t *)&watcher->uv.pipe.handle; | |
} | |
watcher->stream->data = watcher; | |
watcher->cb = NULL; | |
watcher->close_cb = NULL; | |
watcher->events = NULL; | |
xfree(addr); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment