bool BnxDriver::Run() { if (!Load() || m_vBots.empty()) return false; for (size_t i = 0; i < m_vBots.size(); ++i) { m_vBots[i]->SetEventBase(GetEventBase()); m_vBots[i]->StartUp(); } event_base_dispatch(GetEventBase()); return true; }
Pipe::Pipe(const Module* pModule) : Event(pModule) { if (pipe(_fds) != 0) throw std::runtime_error(strerror(errno)); fcntl(_fds[0], F_SETFL, O_NONBLOCK); _read_event = event_new(GetEventBase() ,_fds[0], EV_PERSIST|EV_READ, Pipe::EventCallback, this); event_add(_read_event, NULL); };
bool Listener::Listen() { if (_listener != NULL) return false; int fd = socket(AF_INET, SOCK_STREAM, 0); if (fd == -1) return false; struct sockaddr_in sin; bzero(&sin, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(_port); if (bind(fd, (struct sockaddr*) &sin, sizeof(sin)) < 0) return false; _listener = evconnlistener_new_bind(GetEventBase(), Listener::listener_cb, this ,LEV_OPT_REUSEABLE|LEV_OPT_CLOSE_ON_FREE|LEV_OPT_THREADSAFE, fd ,(struct sockaddr*) &sin, sizeof(sin)); return _listener != NULL; };
struct bufferevent* Listener::createBufferEvent(evutil_socket_t fd) { if (_ssl_ctx != NULL) return bufferevent_openssl_socket_new(GetEventBase(), fd, SSL_new(_ssl_ctx) ,BUFFEREVENT_SSL_ACCEPTING, BEV_OPT_CLOSE_ON_FREE|BEV_OPT_THREADSAFE); return bufferevent_socket_new(GetEventBase(), fd, BEV_OPT_CLOSE_ON_FREE|BEV_OPT_THREADSAFE); };