我们正在考虑使用grpc作为同一台计算机上进程之间进行通信的方法。现在我们正在测试它是否支持Android。我们从grpc源编译了“hello world”测试程序,并且能够在Android设备上运行(4.0.4)。但是,测试失败,输出如下:
E0915 13:23:11.914287843 1074 tcp_server_posix.c:150]检查SO_REUSEPORT:{“created”:“@ 1473945791.913738526”,“description”:“OS Error”,“errno”:92,“file”:“ src / core / lib / iomgr / socket_utils_common_posix.c“,”file_line“:181,”os_error“:”协议不可用“,”系统调用“:”setsockopt(SO_REUSEPORT)“} 服务器监听0.0.0.0:50051
这可能以某种方式修复吗?或者它只是意味着我们不能在Android上使用grpc?
尝试手动设置选项:
class Opts : public ::grpc::ServerBuilderOption
{
public:
void UpdateArguments(ChannelArguments* arg) GRPC_OVERRIDE
{
std::cout << "UpdateArguments called:" << std::endl;
arg->SetInt(GRPC_ARG_ALLOW_REUSEPORT, 0);
}
void UpdatePlugins(std::vector<std::unique_ptr<ServerBuilderPlugin>>* plugins) GRPC_OVERRIDE
{
for(auto s = plugins->begin(); s!= plugins->end(); ++s)
{
std::cout << (*s)->name() << std::endl;
}
}
};
...
std::unique_ptr<ServerBuilderOption> opts(new Opts);
builder.SetOption(std::move(opts));