void TcpMasterServer::postInitServer() { for(UInt32 i = 0; i < WORKERS; ++ i) { TcpSlaveServer * s = newWorker(i); _workers.push_back(std::shared_ptr<TcpSlaveServer>(s)); } for(int i = 0; i < WORKERS; ++ i) { _workerThreads[i].start(*_workers[i]); } _ev_server = event_new(_ev_base, _socket, EV_READ | EV_WRITE | EV_PERSIST, _ev_server_event, this); if(_ev_server == NULL) { close(_socket); destroy(); throw std::bad_alloc(); } event_add(_ev_server, NULL); _ev_timer = event_new(_ev_base, -1, EV_PERSIST, _ev_timer_event, this); if(_ev_timer != NULL) { struct timeval tv = {5, 0}; event_add(_ev_timer, &tv); } }
Worker* multask_createWorker(){ Worker* worker=newWorker(); if(worker!=NULL){ initWorker(worker); } return worker; }
void sfera_webserver::master_listener::_workerProcess(worker_handler newWorkerHandler) { ::close(newWorkerHandler.communicationChannel[1]); _ioservice.notify_fork(b_asio::io_service::fork_child); worker newWorker(newWorkerHandler.communicationChannel[0]); auto server = new http_server(std::move(_serverConfig), &_ioservice); newWorker.run(server); delete server; ::close(newWorkerHandler.communicationChannel[0]); return; }