libevent基于evhttp的服务器打开的文件太多



我创建了一个简单的基于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 buffern");
    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个套接字,对吧?

我应该关闭处理程序函数中的套接字吗?

打开文件描述符的ulimit集是什么?例如,尝试执行"ulimit-n"命令(不带引号)。这些是允许在应用程序中打开的文件描述符的数量。要增加,可以使用ulimit命令。例如ulimit-n 10240

我开始使用event2/*库,并在处理程序函数的末尾添加了evbuffer_free(buf),它完成了任务。

相关内容

  • 没有找到相关文章

最新更新