localhost上的TServerSocket会生成异常

时间:2015-03-02 12:31:49

标签: c++ linux thrift

我使用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找不到该端口。发生了什么事?

1 个答案:

答案 0 :(得分:0)

您在TServerSocket的构造函数中提供的路径字符串不是用于指定服务器地址,而是用于创建Domain Sockets。因此,路径是要使用的文件路径。