From 66bfedc8cdda5e6b1a7e6096e553f790f72a6b63 Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Thu, 12 Dec 2019 18:04:13 +0300 Subject: explicit server activation --- tunnel.c | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) (limited to 'tunnel.c') diff --git a/tunnel.c b/tunnel.c index 2e0718e..27b71ef 100644 --- a/tunnel.c +++ b/tunnel.c @@ -19,10 +19,14 @@ struct socket { socklen_t salen; }; +bool tunnel_daemon(int sock); + static bool socket_connect(struct socket *sock) { - if (connect(sock->fd, sock->sa, sock->salen) < 0) + if (connect(sock->fd, sock->sa, sock->salen) < 0) { + warn("connect"); return false; + } return true; } @@ -101,41 +105,24 @@ bool tunnel_server(void) defer { socket_free(sock); } - if (! tunnel_listen(sock)) + if (!tunnel_listen(sock)) return false; - if (! tunnel_daemon(sock->fd)) + if (!tunnel_daemon(sock->fd)) return false; return true; } -bool tunnel_connect(struct socket *sock) -{ - if (! socket_connect(sock)) { - if (errno == ENOENT) { - if (! tunnel_server()) - return false; - } - - if (errno != ENOENT || ! socket_connect(sock)) { - warn("connect"); - return false; - } - } - - return true; -} - int tunnel_client(void) { struct socket *sock = tunnel_socket(); - if (! sock) + if (!sock) return -1; defer { socket_free(sock); } - if (! tunnel_connect(sock)) + if (!socket_connect(sock)) return -1; return socket_detach_fd(sock); -- cgit v1.2.3-70-g09d2