evhttp_set_cb给回调函数传参
时间: 2024-09-29 14:14:53 浏览: 58
在`libevent`库中,`evhttp_set_gencb`函数用于设置HTTP请求的通用回调函数。这个函数接受三个参数:
1. `struct evhttp *http`: HTTP服务器结构体,代表当前的HTTP连接。
2. `(void(*)(struct evhttp_request *, void *))cb`: 回调函数指针,当有新的HTTP请求时会被调用。
3. `void *arg`: 用户自定义的数据,会在回调函数中作为额外参数传递。
回调函数通常的类型定义为`(void(*)(struct ev_loop *, ev_io *, int event))`,其中`struct ev_loop *main_loop`是主事件循环,`ev_xxx *io_w`(这里`xxx`可能是`http`, `connection`等)是指向IO事件的指针,`int event`表示发生的具体事件类型。
为了简化回调函数的定义,`libevent`提供了宏定义如`ev_http_cb`来创建这些回调函数。例如,如果你有一个简单的回调函数`my_callback`,你可以这样声明和设置:
```c
// 使用宏定义的回调函数声明
typedef void (*ev_http_callback_type)(struct ev_loop *, struct evhttp_request *, void *);
// 原始形式
void my_callback(struct ev_loop *loop, struct evhttp_request *req, void *data);
// 宏定义后的使用
void ev_http_set_cb(struct evhttp *http, ev_http_callback_type cb, void *arg) {
evhttp_set_gencb(http, my_callback, arg);
}
```
在这里,`my_callback`会接收到来自`evhttp_set_gencb`分配的HTTP请求以及用户数据`arg`。当你需要在回调中访问这些参数时,可以直接使用它们。
阅读全文