我使用Ubuntu 14.04 LTS。以下是一个有效的示例代码:
boost::shared_ptr<TestHandler> handler(new TestHandler());
boost::shared_ptr<TProcessor> processor(new TestProcessor(handler));
boost::shared_ptr<TServerTransport> serverTransport(new TServerSocket(9090));
boost::shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
boost::shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
thriftServerThread = std::thread(&TSimpleServer::serve, TSimpleServer(processor, serverTransport, transportFactory, protocolFactory));
我想只在本地主机中使用thrift服务器,所以我改变了:
boost::shared_ptr<TServerTransport> serverTransport(new TServerSocket(9090));
到
boost::shared_ptr<TServerTransport> serverTransport(new TServerSocket("localhost:9090"));
然后我得到了例外:
Thrift:Mon Mar 2 13:28:03 2015 TServerSocket :: listen()setsockopt()TCP_DEFER_ACCEPT不支持操作 在抛出'apache :: thrift :: transport :: TTransportException'的实例后终止调用 what():无法设置TCP_DEFER_ACCEPT:不支持操作
有什么问题?如何解决?
EDIT1 我已经更新了节俭,现在又出现了另一个错误:
Thrift:Tue Mar 3 13:31:40 2015 TServerSocket :: listen()PATH 127.0.0.1:9090 在抛出'apache :: thrift :: transport :: TTransportException'的实例后终止调用 what():无法绑定:地址已在使用中
Netstat找不到该端口。发生了什么事?