Code cleanup

This commit is contained in:
angt
2015-10-22 16:26:12 +02:00
parent f8484777b3
commit 7fb0e3f97d

View File

@@ -58,18 +58,50 @@ static void fd_set_congestion (int fd, const char *name)
printf("setsockopt TCP_CONGESTION: %m\n"); printf("setsockopt TCP_CONGESTION: %m\n");
} }
static int gt_open_sock (struct addrinfo *res) // bad static int fd_listen (int fd, struct addrinfo *ai)
{
fd_set_reuseaddr(fd);
int ret = bind(fd, ai->ai_addr, ai->ai_addrlen);
if (ret==-1) {
printf("bind: %m\n");
return -1;
}
ret = listen(fd, 1);
if (ret==-1) {
printf("listen: %m\n");
return -1;
}
return 0;
}
static int fd_connect (int fd, struct addrinfo *ai)
{
return connect(fd, ai->ai_addr, ai->ai_addrlen);
}
static int fd_create (struct addrinfo *res, int(*func)(int, struct addrinfo *))
{ {
for (struct addrinfo *ai=res; ai; ai=ai->ai_next) { for (struct addrinfo *ai=res; ai; ai=ai->ai_next) {
int fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); int fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
if (fd!=-1)
if (fd==-1)
continue;
if (func(fd, ai)!=-1)
return fd; return fd;
close(fd);
} }
return -1; return -1;
} }
static int gt_open_tun (char *name) static int tun_create (char *name)
{ {
int fd = open("/dev/net/tun", O_RDWR); int fd = open("/dev/net/tun", O_RDWR);
@@ -226,7 +258,6 @@ int main (int argc, char **argv)
int listener = 0; int listener = 0;
char *congestion = NULL; char *congestion = NULL;
struct option opts[] = { struct option opts[] = {
{ "dev", &dev, option_string }, { "dev", &dev, option_string },
{ "host", &host, option_string }, { "host", &host, option_string },
@@ -252,35 +283,12 @@ int main (int argc, char **argv)
return 1; return 1;
} }
int fd = -1; int fd = listener?fd_create(ai, fd_listen):-1;
if (listener) {
fd = gt_open_sock(ai);
if (fd==-1)
return 1;
fd_set_reuseaddr(fd);
int ret = bind(fd, ai->ai_addr, ai->ai_addrlen);
if (ret==-1) {
printf("bind: %m\n");
return 1;
}
ret = listen(fd, 1);
if (ret==-1) {
printf("listen: %m\n");
return 1;
}
}
struct netio tun = { .fd = -1 }; struct netio tun = { .fd = -1 };
struct netio sock = { .fd = -1 }; struct netio sock = { .fd = -1 };
tun.fd = gt_open_tun(dev); tun.fd = tun_create(dev);
if (tun.fd==-1) if (tun.fd==-1)
return 1; return 1;
@@ -303,18 +311,10 @@ int main (int argc, char **argv)
return 1; return 1;
} }
} else { } else {
sock.fd = gt_open_sock(ai); sock.fd = fd_create(ai, fd_connect);
if (sock.fd==-1) if (sock.fd==-1)
return 1;
int ret = connect(sock.fd, ai->ai_addr, ai->ai_addrlen);
if (ret==-1) { // check errno
close(sock.fd);
sock.fd = -1;
continue; continue;
}
} }
fd_set_nonblock(sock.fd); fd_set_nonblock(sock.fd);