mongoose源码分析系列之server_data

本文详细介绍了mg_server结构体的定义及使用方式,包括其内部结构、变量赋值过程、内部如何转化为server_param以及通过示例代码展示具体用法。
目录(?) [-]
  1. 所在的结构体定义
  2. 变量赋值
  3. 内部使用转化为server_param
  4. server_param所在的结构体定义
  5. Demo举例使用

1. 所在的结构体定义

struct mg_server {
sock_t listening_sock;
union socket_address lsa; // Listening socket address
struct ll active_connections;
struct ll uri_handlers;
char *config_options[NUM_OPTIONS];
void *server_data;
void *ssl_ctx; // SSL context
sock_t ctl[2]; // Control socketpair. Used to wake up from select() call
};

2. 变量赋值

mg_create_server函数:
server->server_data = server_data;

3. 内部使用,转化为server_param

accept_new_connection函数
conn->mg_conn.server_param = server->server_data;
LINKED_LIST_ADD_TO_FRONT(&server->active_connections, &conn->link);

4. server_param所在的结构体定义

// This structure contains information about HTTP request.
struct mg_connection {
const char *request_method; // "GET", "POST", etc
const char *uri; // URL-decoded URI
const char *http_version; // E.g. "1.0", "1.1"
const char *query_string; // URL part after '?', not including '?', or NULL

char remote_ip[48]; // Max IPv6 string length is 45 characters
int remote_port; // Client's port

int num_headers; // Number of HTTP headers
struct mg_header {
const char *name; // HTTP header name
const char *value; // HTTP header value
} http_headers[30];

char *content; // POST (or websocket message) data, or NULL
int content_len; // content length

int is_websocket; // Connection is a websocket connection
int status_code; // HTTP status code for HTTP error handler
unsigned char wsbits; // First byte of the websocket frame
void *server_param; // Parameter passed to mg_add_uri_handler()
void *connection_param; // Placeholder for connection-specific data
};

5. Demo举例使用

multi_threaded.c文件中创建mg_create_server时传入参数:
server1 = mg_create_server((void *) "1");

设置uri处理函数:
mg_add_uri_handler(server1, "/", request_handler);

在request_handler回调中,得到conn->server_param变量:
static int request_handler(struct mg_connection *conn) {
mg_send_header(conn, "Content-Type", "text/plain");
mg_printf_data(conn, "This is a reply from server instance # %s",
(char *) conn->server_param);
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值