我已經創建了簡單的基於evhttp的服務器。使用libevent的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個套接字將被使用一次,對吧?
我應該關閉處理函數中的套接字嗎?
我想如果它是「evbuffer_free(but)」 – 2012-02-28 01:38:47