//#define MULTI_THREAD_SUPPORT 1 int httpserver_start(int port, int nthreads, int backlog) { int r, i; int nfd = httpserver_bindsocket(port, backlog); if (nfd < 0) return -1; #ifdef MULTI_THREAD_SUPPORT pthread_t ths[nthreads]; for (i=0; i<nthreads; i++) { struct event_base *base = event_init(); if (base == NULL) return -1; struct evhttp *httpd = evhttp_new(base); if (httpd == NULL) return -1; r = evhttp_accept_socket(httpd, nfd); if (r != 0) return -1; evhttp_set_gencb(httpd, httpserver_generic_handler, NULL); r = pthread_create(&ths[i], NULL, httpserver_dispatch, base); if (r != 0) return -1; } for (i=0; i<nthreads; i++) { pthread_join(ths[i], NULL); } #else struct event_base *base = event_init(); if (base == NULL) return -1; struct evhttp *httpd = evhttp_new(base); if (httpd == NULL) return -1; r = evhttp_accept_socket(httpd, nfd); evhttp_set_gencb(httpd, httpserver_generic_handler, NULL); httpserver_dispatch(base); #endif }
int httpserver_start(int port, int backlog) { int ret; int fd = httpserver_bindsocket(port, backlog); if (fd < 0) { return -1; printf("httpserver_bindsocket error !\n"); } struct event_base *base = event_init(); if (base == NULL) { printf("event_init error !\n"); return -1; } struct evhttp *httpd = evhttp_new(base); if (httpd == NULL) { printf("enhttp_new error !\n"); return -1; } ret = evhttp_accept_socket(httpd, fd); if (ret != 0) { printf("evhttp_accept_socket error \n"); return -1; } evhttp_set_gencb(httpd, httpserver_handler, NULL); event_base_dispatch(base); return 0; }