diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2022-08-22 13:40:27 +0200 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2022-08-23 21:44:04 +0200 |
commit | 1ce4acb85a3bcb953c0f9cc91d2edc855969948b (patch) | |
tree | c06abb52fef74d375c87a7bdf39e7777bbf1b3b1 /src/server.c | |
parent | add doc/rationale.md (diff) | |
download | cimple-1ce4acb85a3bcb953c0f9cc91d2edc855969948b.tar.gz cimple-1ce4acb85a3bcb953c0f9cc91d2edc855969948b.zip |
add some code
A basic client-server app, the client sends commands as an array of
strings. Hopefully I didn't mess up, and hopefully it'll be useful.
Diffstat (limited to 'src/server.c')
-rw-r--r-- | src/server.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/server.c b/src/server.c new file mode 100644 index 0000000..91f3924 --- /dev/null +++ b/src/server.c @@ -0,0 +1,48 @@ +#include "server.h" +#include "cmd.h" +#include "net.h" + +#include <stdio.h> +#include <unistd.h> + +int server_create(struct server *server, const struct settings *settings) +{ + server->fd = bind_to_port(settings->port); + if (server->fd < 0) + return server->fd; + + return 0; +} + +void server_destroy(const struct server *server) +{ + close(server->fd); +} + +static int cmd_handle(const struct cmd *cmd, void *) +{ + for (int i = 0; i < cmd->argc; ++i) + printf("cmd[%d]: %s\n", i, cmd->argv[i]); + return 0; +} + +static int server_handle(int fd, void *) +{ + return cmd_recv_and_send_result(fd, cmd_handle, NULL); +} + +static int server_accept(const struct server *server) +{ + return accept_connection(server->fd, server_handle, NULL); +} + +int server_main(const struct server *server) +{ + int ret = 0; + + while (1) { + ret = server_accept(server); + if (ret < 0) + return ret; + } +} |