Код RPC, разработанный на el 7, не работает на el8

Я портирую приложение с el 7, используя вызовы glibc rpc (многие из них, но в основном svc_register). Я добавил библиотеку libtirpc в свою сборку, она компилируется и запускается, но не создает сокет. Код выглядит следующим образом:

  void RpcServer
    ::run_server()
    {
      pmap_unset (RPCNetwork, FIRST__VERSION);

      m_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
      if (m_sock == -1)
      {
        LOG_ERROR(logger, "Unable to create a socket for the RPC server.");
        return;
      }

      //close the socket immediately on a close call
      struct linger linger = {1, 0};
      if(!setsockopt(m_sock, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger)) == -1)
      {
        LOG_DEBUG(logger, "unable to set socket options for rpc server.");
      }

      struct sockaddr_in addr;
      addr.sin_family = AF_INET;
      addr.sin_port = htons(m_server_port);
      addr.sin_addr.s_addr = 0;


      bool bound = false;
      while(!bound)
      {
        if(bind(m_sock, reinterpret_cast<struct sockaddr*>(&addr), sizeof addr) == -1)
        {
          LOG_ERROR(logger,
              "Unable to bind created rpc socket to server port " << m_server_port << "."
              );
          boost::this_thread::sleep(boost::posix_time::seconds(1));
        }
        else
        {
          LOG_DEBUG(logger, "Was able to bind created socket to server")
            bound = true;
        }
      }

      if(!bound)
      {
        LOG_ERROR(logger,
            "Tried to bind the the RPC server port 10 times without success.  Giving up."
            );
        return;
      }

      m_transp = svctcp_create(m_sock, 102400, 102400);
      if (m_transp == NULL)
      {
        LOG_ERROR(logger, "cannot create tcp service.");
        return;
      }

      if (!svc_register(
            m_transp,
            RPCNetwork,
            FIRST__VERSION,
            &RpcServer::m_rpc_network,
            IPPROTO_TCP
            ))
      {
        LOG_ERROR(logger,
            "unable to register with portmapper.  Trying to register without portmapper."
            );
        if(!svc_register(
            m_transp,
            RPCNetwork,
            FIRST__VERSION,
            &RpcServer::m_rpc_network,
            0
            ))
        {
          LOG_ERROR(logger, "unable to register without portmapper.  Giving up.");
          return;
        }
      } else {
          LOG_DEBUG(logger, "successful return code from svc_register");
      }

      LOG_DEBUG(logger, "Successfully registered!");
    }

Когда я запускаю это на el 8, он говорит, что успешно зарегистрирован, но сокет недоступен, но на el 7 он работает.

0 ответов

Другие вопросы по тегам