aboutsummaryrefslogblamecommitdiffstatshomepage
path: root/src/server.c
blob: 9604bd655adb8b1d0b6239dd7bc6fa596b0e5388 (plain) (tree)
1
2
                   
                


















                                                                         
                                                    
 
                                     



                                        
                                                              
















                                                                  
#include "server.h"
#include "msg.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 msg_handle(const struct msg *msg, void *)
{
	return msg_dump_unknown(msg);
}

static int server_handle(int fd, void *)
{
	return msg_recv_and_send_result(fd, msg_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;
	}
}