static void rspamd_http_start_servers (pid_t *sfd, rspamd_inet_addr_t *addr) { guint i; gint fd; fd = rspamd_inet_address_listen (addr, SOCK_STREAM, TRUE); g_assert (fd != -1); for (i = 0; i < nworkers; i++) { sfd[i] = fork (); g_assert (sfd[i] != -1); if (sfd[i] == 0) { gperf_profiler_init (NULL, "http-server"); rspamd_http_server_func (fd, addr); gperf_profiler_stop (); exit (EXIT_SUCCESS); } } close (fd); }
static void rspamd_http_server_func (const gchar *path, rspamd_inet_addr_t *addr, rspamd_mempool_mutex_t *mtx, gpointer kp, struct rspamd_keypair_cache *c) { struct rspamd_http_connection_router *rt; struct event_base *ev_base = event_init (); struct event accept_ev; gint fd; rt = rspamd_http_router_new (rspamd_server_error, rspamd_server_finish, NULL, ev_base, path, c); g_assert (rt != NULL); rspamd_http_router_set_key (rt, kp); g_assert ((fd = rspamd_inet_address_listen (addr, SOCK_STREAM, TRUE)) != -1); event_set (&accept_ev, fd, EV_READ | EV_PERSIST, rspamd_server_accept, rt); event_base_set (ev_base, &accept_ev); event_add (&accept_ev, NULL); rspamd_mempool_unlock_mutex (mtx); event_base_loop (ev_base, 0); }
static void rspamd_http_start_servers (pid_t *sfd, rspamd_inet_addr_t *addr, struct rspamd_cryptobox_keypair *serv_key, struct rspamd_keypair_cache *c) { guint i; gint fd; g_assert ((fd = rspamd_inet_address_listen (addr, SOCK_STREAM, TRUE)) != -1); for (i = 0; i < nservers; i ++) { sfd[i] = fork (); g_assert (sfd[i] != -1); if (sfd[i] == 0) { gperf_profiler_init (NULL, "plain-http-server"); rspamd_http_server_func (fd, "/tmp/", addr, serv_key, c); gperf_profiler_stop (); exit (EXIT_SUCCESS); } } close (fd); }