diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 45 |
1 files changed, 30 insertions, 15 deletions
@@ -9,8 +9,11 @@ int main(int argc, char *argv[]) { - static server_ctx srv = {0}; + const size_t srv_siz = 3; + const char *ssh_ports[srv_siz]; + server_ctx srv[srv_siz]; struct addrinfo *netifs = NULL; + int epoll_fd; (void)argc; (void)argv; @@ -18,24 +21,36 @@ int main(int argc, char *argv[]) LOG_SET_FUNCS_VA(LOG_COLORED_FUNCS); N("%s (C) 2018 Toni Uhlig (%s)", PACKAGE_STRING, PACKAGE_BUGREPORT); - ABORT_ON_FATAL( server_init_ctx(&srv, ssh_init_cb), - "Server initialisation" ); - server_validate_ctx(&srv); + memset(&srv[0], 0, sizeof(srv)); + ssh_ports[0] = "2222"; + ssh_ports[1] = "2223"; + ssh_ports[2] = "22050"; + for (int i = 0; i < srv_siz; ++i) { + N("Initialising SSH server on port %s", ssh_ports[i]); - GAI_ABORT_ON_FATAL( socket_init_in(&srv.sock, NULL, "2222", &netifs), - "Socket initialisation" ); + ABORT_ON_FATAL( server_init_ctx(&srv[i], ssh_init_cb), + "Server initialisation" ); + server_validate_ctx(&srv[i]); - ABORT_ON_FATAL( socket_bind_in(&srv.sock, netifs), - "Socket bind" ); + GAI_ABORT_ON_FATAL( socket_init_in(&srv[i].sock, NULL, ssh_ports[i], &netifs), + "Socket initialisation" ); - ABORT_ON_FATAL( socket_listen_in(&srv.sock), - "Socket listen" ); + ABORT_ON_FATAL( socket_bind_in(&srv[i].sock, netifs), + "Socket bind" ); - ABORT_ON_FATAL( srv.server_cbs.on_listen(&srv.server_dat), - "Socket on listen callback" ); + ABORT_ON_FATAL( socket_listen_in(&srv[i].sock), + "Socket listen" ); - D2("%s", "Server mainloop"); - ABORT_ON_FATAL( server_mainloop(&srv), - "Server mainloop" ); + ABORT_ON_FATAL( srv[i].server_cbs.on_listen(&srv[i].server_dat), + "Socket on listen callback" ); + } + + D2("%s", "Server epoll setup"); + epoll_fd = server_setup_epoll( (const server_ctx **) &srv, srv_siz ); + ABORT_ON_FATAL( epoll_fd >= 0, "Server epoll setup" ); + + D2("%s", "Server epoll mainloop"); + ABORT_ON_FATAL( server_mainloop_epoll( epoll_fd, (const server_ctx **) &srv, srv_siz ), + "Server epoll mainloop" ); return 0; } |