void LibEventMain::acceptfn(int listener, short event, void *arg) { EventHandler *processor = (EventHandler*) arg; LibEventMain *plevent = (LibEventMain*) processor->getParent(); sockaddr_storage ss; socklen_t slen = sizeof(ss); // Investigate: Using a loop to accept connections makes it faster? int fd = accept(listener, (sockaddr*) &ss, &slen); if (fd < 0) { // Investigate: Should check EWOULDBLOCK and EAGAIN? perror("accept"); return; } INFO_OUT("Client connected on fd %d\n", fd); bufferevent *bev; evutil_make_socket_nonblocking(fd); bev = bufferevent_socket_new(plevent->m_ebase, fd, BEV_OPT_CLOSE_ON_FREE); processor->setContext((Context*) bev); bufferevent_setcb(bev, readfn, NULL, errorfn, arg); bufferevent_setwatermark(bev, EV_READ, 0, max_buff); bufferevent_enable(bev, EV_READ | EV_WRITE); }