我使用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"));
但后来我得到了例外:
节俭:2015年3月2日星期一13:28:03 TServerSocket :: listen()setsockopt()TCP_DEFER_ACCEPT操作不受支持
抛出'apache :: thrift :: transport :: TTransportException'实例后调用终止方法
what():无法设置TCP_DEFER_ACCEPT:不支持的操作
怎么了 ?如何解决?
编辑1
我已经更新了节俭,现在又遇到了另一个错误:
节俭:2015年3月3日星期二13:31:40 TServerSocket :: listen()PATH 127.0.0.1:9090
抛出'apache :: thrift :: transport :: TTransportException'实例后调用终止方法
what():无法绑定:地址已在使用中
Netstat找不到该端口。到底是怎么回事 ?
最佳答案
您在TServerSocket的构造函数中提供的路径字符串不是用于指定服务器地址,而是用于创建Domain Sockets。因此,该路径是要使用的文件路径。
关于c++ - 本地主机上的TServerSocket生成异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28809857/