multi_threaded_server.c
Go to the documentation of this file.
1 #include "mongoose.h"
2 
3 // Start a browser and hit refresh couple of times. The replies will
4 // come from both server instances.
5 static int ev_handler(struct mg_connection *conn, enum mg_event ev) {
6  if (ev == MG_REQUEST) {
7  mg_send_header(conn, "Content-Type", "text/plain");
8  mg_printf_data(conn, "This is a reply from server instance # %s",
9  (char *) conn->server_param);
10  return MG_TRUE;
11  } else if (ev == MG_AUTH) {
12  return MG_TRUE;
13  } else {
14  return MG_FALSE;
15  }
16 }
17 
18 static void *serve(void *server) {
19  for (;;) mg_poll_server((struct mg_server *) server, 1000);
20  return NULL;
21 }
22 
23 int main(void) {
24  struct mg_server *server1, *server2;
25 
26  server1 = mg_create_server((void *) "1", ev_handler);
27  server2 = mg_create_server((void *) "2", ev_handler);
28 
29  // Make both server1 and server2 listen on the same sockets
30  mg_set_option(server1, "listening_port", "8080");
31  mg_copy_listeners(server1, server2);
32 
33  // server1 goes to separate thread, server 2 runs in main thread.
34  // IMPORTANT: NEVER LET DIFFERENT THREADS HANDLE THE SAME SERVER.
35  mg_start_thread(serve, server1);
36  mg_start_thread(serve, server2);
37  getchar();
38 
39  return 0;
40 }
void mg_send_header(struct mg_connection *c, const char *name, const char *v)
Definition: mongoose.c:2759
void * mg_start_thread(void *(*func)(void *), void *param)
int main(void)
static void * serve(void *server)
struct mg_server * mg_create_server(void *server_data, mg_handler_t handler)
Definition: mongoose.c:5431
void mg_copy_listeners(struct mg_server *s, struct mg_server *to)
Definition: mongoose.c:5099
time_t mg_poll_server(struct mg_server *server, int milliseconds)
Definition: mongoose.c:4965
static int ev_handler(struct mg_connection *conn, enum mg_event ev)
size_t mg_printf_data(struct mg_connection *c, const char *fmt,...)
Definition: mongoose.c:2785
mg_event
Definition: mongoose.h:62
static struct mg_server * server
Definition: web_server.c:72
const char * mg_set_option(struct mg_server *server, const char *name, const char *value)
Definition: mongoose.c:5143
void * server_param
Definition: mongoose.h:55


rc_tagdetect_client
Author(s): Monika Florek-Jasinska , Raphael Schaller
autogenerated on Sat Feb 13 2021 03:42:16