int Group::masterMainloopWaitForEvents(fd_set& rd_set, fd_set& wr_set, int max_fd) { struct timeval tv_timeout = { 10, 0 /*us*/ }; const int nfds = select(max_fd + 1, &rd_set, &wr_set, nullptr, &tv_timeout); if (nfds == -1) { PGL_PROTECT_ERRNO { PGL_LOG() << "select returned -1: errno=" << errno; } throw SyscallError("select", errno); }
bool NameServiceClient::register_service( const std::string &in_service_name, int32_t in_port ) { if( !m_client || !m_client->get_is_connected() ) { throw SemanticError() <<errinfo_errorid( ErrorID::SEMANTIC_ERR_NOT_CONNECTED); } char hostname[NAME_MAX]; if( -1 == gethostname( hostname, NAME_MAX ) ) { throw SyscallError() <<boost::errinfo_errno(errno) << boost::errinfo_api_function("gethostname"); } ServiceRequestData request; request.m_service_name = in_service_name; request.m_hostname = hostname; request.m_port = in_port; std::ostringstream sout; { boost::archive::text_oarchive oa( sout ); oa & request; } DataServiceMessage message( DATA_SERVICE_REGISTER ); std::strncpy( message.m_data, sout.str().c_str(), sout.str().size()); MemInfo data( reinterpret_cast<char *>( &message ), sizeof(DataServiceMessage)); m_client->send_data( data ); std::unique_lock<std::mutex> l( m_mutex ); while( !m_stop && !m_response_ready ) { m_response_ready_cond.wait( l ); } if( m_stop ) { return false; } bool status = m_status; m_status = false; m_response_ready = false; return status; }