Change to slashes for host/port delimiter.
This commit is contained in:
4
adsbus.c
4
adsbus.c
@@ -30,7 +30,7 @@ static void print_usage(char *argv[]) {
|
|||||||
"\n"
|
"\n"
|
||||||
"Options:\n"
|
"Options:\n"
|
||||||
"\t--help\n"
|
"\t--help\n"
|
||||||
"\t--backend=HOST:PORT\n"
|
"\t--backend=HOST/PORT\n"
|
||||||
"\t--dump=FORMAT\n"
|
"\t--dump=FORMAT\n"
|
||||||
, argv[0]);
|
, argv[0]);
|
||||||
}
|
}
|
||||||
@@ -48,7 +48,7 @@ static bool parse_opts(int argc, char *argv[], int epoll_fd) {
|
|||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'b':
|
case 'b':
|
||||||
// It would be really nice if libc had a standard way to split host:port.
|
// It would be really nice if libc had a standard way to split host:port.
|
||||||
delim = strrchr(optarg, ':');
|
delim = strrchr(optarg, '/');
|
||||||
if (delim == NULL) {
|
if (delim == NULL) {
|
||||||
print_usage(argv);
|
print_usage(argv);
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
12
backend.c
12
backend.c
@@ -52,7 +52,7 @@ struct backend *backend_new(char *node, char *service, int epoll_fd) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void backend_connect(struct backend *backend, int epoll_fd) {
|
static void backend_connect(struct backend *backend, int epoll_fd) {
|
||||||
fprintf(stderr, "B %s: Connecting to %s %s...\n", backend->id, backend->node, backend->service);
|
fprintf(stderr, "B %s: Resolving %s/%s...\n", backend->id, backend->node, backend->service);
|
||||||
|
|
||||||
struct addrinfo hints = {
|
struct addrinfo hints = {
|
||||||
.ai_family = AF_UNSPEC,
|
.ai_family = AF_UNSPEC,
|
||||||
@@ -61,7 +61,7 @@ static void backend_connect(struct backend *backend, int epoll_fd) {
|
|||||||
|
|
||||||
int gai_err = getaddrinfo(backend->node, backend->service, &hints, &backend->addrs);
|
int gai_err = getaddrinfo(backend->node, backend->service, &hints, &backend->addrs);
|
||||||
if (gai_err) {
|
if (gai_err) {
|
||||||
fprintf(stderr, "B %s: getaddrinfo(%s %s): %s\n", backend->id, backend->node, backend->service, gai_strerror(gai_err));
|
fprintf(stderr, "B %s: getaddrinfo(%s/%s): %s\n", backend->id, backend->node, backend->service, gai_strerror(gai_err));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
backend->addr = backend->addrs;
|
backend->addr = backend->addrs;
|
||||||
@@ -73,7 +73,7 @@ static void backend_connect_result(struct backend *backend, int epoll_fd, int re
|
|||||||
assert(getnameinfo(backend->addr->ai_addr, backend->addr->ai_addrlen, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0);
|
assert(getnameinfo(backend->addr->ai_addr, backend->addr->ai_addrlen, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0);
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case 0:
|
case 0:
|
||||||
fprintf(stderr, "B %s: Connected to %s %s\n", backend->id, hbuf, sbuf);
|
fprintf(stderr, "B %s: Connected to %s/%s\n", backend->id, hbuf, sbuf);
|
||||||
freeaddrinfo(backend->addrs);
|
freeaddrinfo(backend->addrs);
|
||||||
backend->peer.event_handler = backend_read;
|
backend->peer.event_handler = backend_read;
|
||||||
peer_epoll_add((struct peer *) backend, epoll_fd, EPOLLIN);
|
peer_epoll_add((struct peer *) backend, epoll_fd, EPOLLIN);
|
||||||
@@ -85,7 +85,7 @@ static void backend_connect_result(struct backend *backend, int epoll_fd, int re
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "B %s: Can't connect to %s %s: %s\n", backend->id, hbuf, sbuf, strerror(result));
|
fprintf(stderr, "B %s: Can't connect to %s/%s: %s\n", backend->id, hbuf, sbuf, strerror(result));
|
||||||
close(backend->peer.fd);
|
close(backend->peer.fd);
|
||||||
backend->addr = backend->addr->ai_next;
|
backend->addr = backend->addr->ai_next;
|
||||||
// Tail recursion :/
|
// Tail recursion :/
|
||||||
@@ -97,13 +97,13 @@ static void backend_connect_result(struct backend *backend, int epoll_fd, int re
|
|||||||
static void backend_connect_next(struct backend *backend, int epoll_fd) {
|
static void backend_connect_next(struct backend *backend, int epoll_fd) {
|
||||||
if (backend->addr == NULL) {
|
if (backend->addr == NULL) {
|
||||||
freeaddrinfo(backend->addrs);
|
freeaddrinfo(backend->addrs);
|
||||||
fprintf(stderr, "B %s: Can't connect to %s %s\n", backend->id, backend->node, backend->service);
|
fprintf(stderr, "B %s: Can't connect to any addresses of %s/%s\n", backend->id, backend->node, backend->service);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
|
char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
|
||||||
assert(getnameinfo(backend->addr->ai_addr, backend->addr->ai_addrlen, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0);
|
assert(getnameinfo(backend->addr->ai_addr, backend->addr->ai_addrlen, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0);
|
||||||
fprintf(stderr, "B %s: Connecting to %s %s...\n", backend->id, hbuf, sbuf);
|
fprintf(stderr, "B %s: Connecting to %s/%s...\n", backend->id, hbuf, sbuf);
|
||||||
|
|
||||||
backend->peer.fd = socket(backend->addr->ai_family, backend->addr->ai_socktype | SOCK_NONBLOCK, backend->addr->ai_protocol);
|
backend->peer.fd = socket(backend->addr->ai_family, backend->addr->ai_socktype | SOCK_NONBLOCK, backend->addr->ai_protocol);
|
||||||
assert(backend->peer.fd >= 0);
|
assert(backend->peer.fd >= 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user