我使用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/

10-11 02:32