/** * Starts a HTTP server which serves the given HTTP easy routes. * * @param sched Pointer to a scheduler * @param ip Ip address to bind * @param port Port to bind * @param routes Array of HTTP easy route to server * @param size Number of routes * * @return 0 on success, or -1 if an error occurs */ int rinoohttp_easy_server(t_rinoosched *sched, t_ip *ip, uint16_t port, t_rinoohttp_route *routes, int size) { t_rinoosocket *server; t_rinoohttp_easy_context *context; if (routes == NULL) { return -1; } server = rinoo_tcp_server(sched, ip, port); if (server == NULL) { return -1; } context = malloc(sizeof(*context)); if (context == NULL) { return -1; } context->socket = server; context->routes = routes; context->nbroutes = size; if (rinoo_task_start(sched, rinoohttp_easy_server_process, context) != 0) { free(context); return -1; } return 0; }
void task_server(void *sched) { t_socket *server; t_socket *client; server = rinoo_tcp_server(sched, IP_ANY, 4242); while ((client = rinoo_tcp_accept(server, NULL, NULL)) != NULL) { rinoo_task_start(sched, task_client, client); } rinoo_socket_destroy(server); }
void server_func(void *unused(arg)) { t_socket *server; t_socket *client; server = rinoo_tcp_server(rinoo_sched_self(), IP_ANY, 4242); XTEST(server != NULL); client = rinoo_tcp_accept(server, NULL, NULL); XTEST(client != NULL); rinoo_log("client accepted"); rinoo_task_start(rinoo_sched_self(), process_client, client); rinoo_socket_destroy(server); }
void http_server(void *sched) { t_ip ip; uint16_t port; t_socket *server; t_socket *client; server = rinoo_tcp_server(sched, IP_ANY, 4242); XTEST(server != NULL); client = rinoo_tcp_accept(server, &ip, &port); XTEST(client != NULL); rinoo_log("server - accepting client (%s:%d)", inet_ntoa(*(struct in_addr *) &ip), port); rinoo_task_start(sched, http_server_process, client); rinoo_socket_destroy(server); }