libevent 如何实现一个http服务端
时间: 2023-10-01 17:03:39 浏览: 106
Libevent 服务端 客户端 代码实现
libevent是一个基于事件驱动的网络库,可以方便地实现一个HTTP服务端。下面是一个简单的示例:
```c
#include <event2/event.h>
#include <event2/http.h>
#include <event2/buffer.h>
#include <string.h>
void http_request_cb(struct evhttp_request *req, void *arg) {
struct evbuffer *evb = evbuffer_new();
if (evb == NULL) {
evhttp_send_error(req, HTTP_INTERNAL, "Internal Server Error");
return;
}
evbuffer_add_printf(evb, "Hello, World!");
evhttp_send_reply(req, HTTP_OK, "OK", evb);
evbuffer_free(evb);
}
int main() {
struct event_base *evbase = event_base_new();
struct evhttp *httpd = evhttp_new(evbase);
if (httpd == NULL) {
return 1;
}
int port = 8080;
if (evhttp_bind_socket(httpd, "0.0.0.0", port) != 0) {
return 1;
}
evhttp_set_gencb(httpd, http_request_cb, NULL);
event_base_dispatch(evbase);
evhttp_free(httpd);
event_base_free(evbase);
return 0;
}
```
这个示例创建了一个HTTP服务端,监听8080端口,并在接收到请求时返回一个"Hello, World!"的响应。其中,`evhttp_set_gencb`函数用于设置一个通用的回调函数,当收到一个HTTP请求时,会调用该函数。在回调函数中,可以根据请求的内容进行处理,并通过`evhttp_send_reply`函数发送响应。
需要注意的是,这个示例没有进行任何的错误处理,实际使用中需要根据情况进行处理。
阅读全文