diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2019-12-12 18:04:13 +0300 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2019-12-12 18:04:13 +0300 |
| commit | 66bfedc8cdda5e6b1a7e6096e553f790f72a6b63 (patch) | |
| tree | f79e6e502ec69ab2ad45d900d210f77c9f8bcc99 /tunnel.c | |
| parent | 45c6387126ba8a09292ce72b0f568041950ef329 (diff) | |
explicit server activation
Diffstat (limited to 'tunnel.c')
| -rw-r--r-- | tunnel.c | 31 |
1 files changed, 9 insertions, 22 deletions
@@ -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); |
