`evhttp_set_cb` 是一个用于设置回调函数的函数,该回调函数在 Libevent 的 HTTP 服务器框架 (`libevent-http`) 中用于处理 HTTP 请求。这个函数需要三个参数:一个 `evhttp` 实例,一个回调函数,以及一个用于传递到回调函数的 "ctx" 参数。
下面是一个简单的例子,展示如何使用 `evhttp_set_cb` 函数设置回调函数来处理 HTTP 请求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <event.h>
#include <evhttp.h>
// 回调函数原型
void callback(struct evhttp_request *req, void *ctx);
int main(int argc, char **argv) {
// 初始化 Libevent
event_init();
// 创建一个 evhttp 实例
struct evhttp *httpd = evhttp_new(NULL);
// 设置回调函数来处理 HTTP 请求
evhttp_set_cb(httpd, "/", callback, NULL);
// 开始监听 HTTP 请求
evhttp_bind_socket(httpd, "*.*.*.*", 8080);
// 进入事件循环
event_dispatch();
// 释放资源
evhttp_free(httpd);
event_base_free(base);
return 0;
}
// 回调函数实现
void callback(struct evhttp_request *req, void *ctx) {
// 提取请求的 URL 和方法
const char *request_uri = evhttp_request_get_uri(req);
const char *request_method = evhttp_request_get_command(req);
// 输出请求信息
printf("请求URL: %s\n", request_uri);
printf("请求方法: %s\n", request_method);
// 生成响应
struct evbuffer *buffer = evbuffer_new();
evbuffer_add_printf(buffer, "Hello, World!\n");
// 发送响应
evhttp_send_reply(req, HTTP_OK, "OK", buffer);
// 释放资源
evbuffer_free(buffer);
}
```
在这个例子中,我们创建了一个简单的 HTTP 服务器,它监听端口 8080,并在根路径("/")上设置回调函数 `callback`。当收到 HTTP 请求时,`callback` 函数会被调用,打印出请求的 URL 和方法,然后发送一个包含 "Hello, World!\n" 的 HTTP 响应。