我创建了简单的基于evhttp的服务器。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <event.h>
#include <evhttp.h>
void
handler(struct evhttp_request *req, void *arg) {
struct evbuffer *buf;
buf = evbuffer_new();
if(buf == NULL) {
fprintf(stderr, "ERROR: Failed to create response buffer\n");
exit(EXIT_FAILURE);
}
evbuffer_add_printf(buf, "Server called");
evhttp_send_reply(req, HTTP_OK, "OK", buf);
}
int
main(int argc, char **argv) {
struct evhttp *http;
event_init();
http = evhttp_start("0.0.0.0", 8081);
evhttp_set_gencb(http, handler, NULL);
event_dispatch();
evhttp_free(http);
exit(EXIT_SUCCESS);
}
当我开始使用
进行基准测试时ab -r -n 1000 -c 50 http://0.0.0.0:8081/
经过多次尝试后,我收到了这些警告:
[warn] Error from accept() call: Too many open files
有点我没有关闭套接字......并发级别50的目标是只使用50个套接字,对吗?
我应该在处理函数中关闭套接字吗?
答案 0 :(得分:1)
打开文件描述符的ulimit是什么?例如。尝试执行'ulimit -n'命令(不带引号)。这些是允许在您的应用程序中打开的文件描述符的数量。要增加,可以使用ulimit命令。例如 ulimit -n 10240
答案 1 :(得分:0)
我开始使用event2/*
libs并在处理程序函数的末尾添加evbuffer_free(buf)
并完成了这项工作。