aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c45
1 files changed, 30 insertions, 15 deletions
diff --git a/src/main.c b/src/main.c
index 7ae3cd7..b0c23b3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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;
}