Ejemplo n.º 1
0
  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);
    }
Ejemplo n.º 2
0
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;
}