libevent2.1 版本 evhttp 中设置 端口复用 服务器代码
时间: 2024-03-28 13:42:23 浏览: 185
可以使用 libevent 中的 evutil_make_socket_reuseable 函数来设置端口复用,示例代码如下:
```c
#include <event2/http.h>
#include <event2/http_struct.h>
#include <event2/util.h>
int main(int argc, char **argv)
{
struct event_base *base = NULL;
struct evhttp *http_server = NULL;
struct evhttp_bound_socket *bound_socket = NULL;
// 创建 event_base
base = event_base_new();
if (!base) {
fprintf(stderr, "Could not initialize libevent!\n");
return 1;
}
// 创建 evhttp
http_server = evhttp_new(base);
if (!http_server) {
fprintf(stderr, "Could not create evhttp!\n");
event_base_free(base);
return 1;
}
// 绑定端口并设置监听队列大小
bound_socket = evhttp_bind_socket_with_handle(
http_server, "0.0.0.0", 8080, 1024);
if (!bound_socket) {
fprintf(stderr, "Could not bind to port 8080!\n");
evhttp_free(http_server);
event_base_free(base);
return 1;
}
// 设置端口复用
evutil_make_socket_reuseable(evhttp_bound_socket_get_fd(bound_socket));
// 开始事件循环
event_base_dispatch(base);
// 释放资源
evhttp_bound_socket_free(bound_socket);
evhttp_free(http_server);
event_base_free(base);
return 0;
}
```
在上面的代码中,evutil_make_socket_reuseable 函数用于设置端口复用,它的参数是 evhttp_bound_socket_get_fd 函数返回的套接字文件描述符。
阅读全文