代码之家  ›  专栏  ›  技术社区  ›  Stéphane

grpc的ServerBuilder::AddListeningPort()总是返回TCP端口零

  •  0
  • Stéphane  · 技术社区  · 6 年前

    使用grpc ServerBuilder 班级。从 the examples provided

    const std::string server_address = "0.0.0.0:12345";
    int tcp_port;
    grpc::ServerBuilder builder;
    builder.AddListeningPort(server_address, grpc::InsecureServerCredentials(), &tcp_port);
    builder.RegisterService(&myservice);
    auto server(builder.BuildAndStart());
    std::cout << "port=" << tcp_port << std::endl;
    server->Wait();
    

    不管我想用什么 server_address tcp_port 始终为零,并且调用netstat查看所有侦听端口确认我的应用程序没有在任何地方侦听。

    这个 AddListeningPort() here .

    到目前为止我尝试过的地址示例:

    [::1]:54321
    dns:///[::1]43210
    dns:///::1:
    ::1
    ::1:
    0.0.0.0:12345
    localhost
    localhost:7525
    127.0.0.1
    127.0.0.1:9876
    

    (我尝试了几十个随机端口号,不仅仅是这里的端口号,netstat确认我没有任何绑定到这些端口的东西。)

    有没有办法从grpc获得更多信息?似乎没有任何API可供调用 grpc::Server 也不是 grpc::ServerBuilder 获取错误代码、状态信息等。


    编辑: 对于将来在google上搜索grpc相关内容的人,我编辑了示例代码来移动 std::cout BuildAndStart() (谢谢@Botje)

    netstat -q -b -n -p tcp
    

    netstat -q -b -n -p tcpv6
    

    由于地址与此ipv6环回类似: [::1]:12345

    请注意,您可以多次调用它,因此现在我使用类似于以下几行的内容:

    builder.AddListeningPort("127.0.0.1:12345", grpc::InsecureServerCredentials(), &tcp4_port);
    builder.AddListeningPort("[::1]:12345", grpc::InsecureServerCredentials(), &tcp6_port);
    
    0 回复  |  直到 6 年前
        1
  •  2
  •   Botje    6 年前

    文件中有这样的说法 selected_port

    如果没有 nullptr grpc::Server 对应的端点 成功绑定后 BuildAndStart() ,否则为0。 AddListeningPort 不修改此指针。

    以及 addr_uri :

    要绑定到任何地址,请使用IPv6 any,即。, [::]:<port>

    试着传球 "[::]:12345" 作为 只检查 tcp_port 之后 打电话 BuildAndStart .