mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-16 10:39:49 +00:00
Refactor Mongoose documentation
PUBLISHED_FROM=e9a4e5c7b4a1d03b93a2a79e29de19e60e919929
This commit is contained in:
1 parent
4120f953c7
commit
12437fd7fe
87 files changed
+977
-332
No files matched your search
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: HTTP server example
|
||||
---
|
||||
|
||||
To create an HTTP server, follow this pattern:
|
||||
|
||||
1. Create a listening connection by calling `mg_bind()` or `mg_bind_opt()`
|
||||
2. Call `mg_set_protocol_http_websocket()` for that listening connection.
|
||||
That attaches a built-in HTTP event handler which parses incoming
|
||||
data and triggers HTTP-specific events. For example, when an HTTP request
|
||||
is fully buffered, a built-in HTTP handler parses the request and
|
||||
calls user-defined event handler with `MG_EV_HTTP_REQUEST` event and
|
||||
parsed HTTP request as an event data.
|
||||
3. Create event handler function. Note that event handler receives all
|
||||
events - low level TCP events like `MG_EV_RECV` and high-level HTTP
|
||||
events like `MG_EV_HTTP_REQUEST`. Normally, an event handler function
|
||||
should only handle `MG_EV_HTTP_REQUEST` event.
|
||||
|
||||
Here's an example of the simplest HTTP server. Error checking is omitted for
|
||||
the sake of clarity:
|
||||
|
||||
```c
|
||||
#include "mongoose.h"
|
||||
|
||||
static const char *s_http_port = "8000";
|
||||
|
||||
static void ev_handler(struct mg_connection *c, int ev, void *p) {
|
||||
if (ev == MG_EV_HTTP_REQUEST) {
|
||||
struct http_message *hm = (struct http_message *) p;
|
||||
|
||||
// We have received an HTTP request. Parsed request is contained in `hm`.
|
||||
// Send HTTP reply to the client which shows full original request.
|
||||
mg_send_head(c, 200, hm.message.len, "Content-Type: text/plain");
|
||||
mg_printf(c, "%.*s", hm.message.len, hm.message.p);
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
struct mg_mgr mgr;
|
||||
struct mg_connection *c;
|
||||
|
||||
mg_mgr_init(&mgr, NULL);
|
||||
c = mg_bind(&mgr, s_http_port, ev_handler);
|
||||
mg_set_protocol_http_websocket(c);
|
||||
|
||||
for (;;) {
|
||||
mg_mgr_poll(&mgr, 1000);
|
||||
}
|
||||
mg_mgr_free(&mgr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
Reference in new issue
Block a user