int NetServer::ServerThread(void* param) { event_base_dispatch(net_evbase); for(auto bit = users.begin(); bit != users.end(); ++bit) { bufferevent_disable(bit->first, EV_READ); bufferevent_free(bit->first); } users.clear(); evconnlistener_free(listener); listener = 0; if(broadcast_ev) { evutil_socket_t fd; event_get_assignment(broadcast_ev, 0, &fd, 0, 0, 0); evutil_closesocket(fd); event_free(broadcast_ev); broadcast_ev = 0; } if(duel_mode) { event_free(duel_mode->etimer); delete duel_mode; } duel_mode = 0; event_base_free(net_evbase); net_evbase = 0; return 0; }
int main() { pipe(pp); struct event_base *base = event_base_new(); evr = event_new(base, pp[0], EV_READ, read_cb, NULL); evw = event_new(base, pp[1], EV_WRITE | EV_TIMEOUT, write_cb, NULL); event_add(evw, NULL); event_add(evr, NULL); struct event_base *outbase; int fdout; event_get_assignment(evw, NULL, &fdout, NULL, NULL, NULL); /* Note fdout. */ outbase = event_get_base(evw); /* outbase == base */ event_callback_fn cb = event_get_callback(evw); assert(write_cb == cb); assert(NULL == event_get_callback_arg(evw)); assert(EV_WRITE|EV_TIMEOUT == event_get_events(evw)); assert(pp[1] == event_get_fd(evw)); assert(event_initialized(evw) == 1); test_num_events(); event_base_dispatch(base); return 0; }
void NetServer::StopBroadcast() { if(!net_evbase || !broadcast_ev) return; event_del(broadcast_ev); evutil_socket_t fd; event_get_assignment(broadcast_ev, 0, &fd, 0, 0, 0); evutil_closesocket(fd); event_free(broadcast_ev); broadcast_ev = 0; }