本地主机上的TServerSocket生成异常

TServerSocket on the localhost generates an exception

本文关键字:异常 TServerSocket 主机      更新时间:2023-10-16

我使用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));

我只想在本地主机中使用旧服务器,所以我更改了:

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::fract::transport::TTransportException"的实例后调用terminatewhat():无法设置TCP_DEFER_ACCEPT:不支持操作

怎么了?如何解决?

第1版我更新了节俭,现在我得到了另一个错误:

Thrift:2015年3月3日星期二13:31:40 TServerSocket::listen()PATH 127.0.0.1:9090在抛出"apache::fract::transport::TTransportException"的实例后调用terminatewhat():无法绑定:地址已在使用

Netstat找不到那个端口。怎么回事?

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