저는 간단한 evhp 기반 서버를 만들었습니다. 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)"이 맞는지 알 수 있습니다. –