1

编辑: juan.facorro 指出了真正的问题,即当服务器未运行时,mytransport->open()调用GlobalOutput.perror("error code")TSocket.cpp。但是在我的代码中,在被初始化mytransport->open()之前被调用GlobalOutput

有关更多信息,请参阅此链接


我有一个shared_ptr被调用mytransport的,我这样声明它:

shared_ptr<TTransport> mytransport(new TBufferedTransport(socket));

但是当我打电话时,mytransport->open();我遇到了分段错误,并且堆栈跟踪的顶部说:

#0  0x00000000 in ?? ()
#1  0x08068281 in apache::thrift::TOutput::perror (this=0x807a44c, message=0x9dc0e14 "TSocket::open() connect() <Host: localhost Port: 9090>", errno_copy=111) at src/thrift/Thrift.cpp:65
#2  0x080670eb in perror (errno_copy=<optimized out>, message=..., this=<optimized out>) at ./src/thrift/Thrift.h:123
#3  apache::thrift::transport::TSocket::openConnection (this=0xbfe69ea0, res=0xbfe69e9c) at src/thrift/transport/TSocket.cpp:277

我不太了解“->”运算符,但它似乎mytransport指向一个NULL对象。有任何想法吗?

编辑:如果我将代码放入主类,它会正常运行并给出我想要的错误:

TSocket::open() connect() <Host: localhost Port: 9090>Connection refused

(参见堆栈跟踪中的#1)。但是,当我将代码放入库中的类(主类使用)中时,就会出现分段错误。所以这可能是某种范围问题?

4

1 回答 1

1

基于堆栈跟踪并在对 . 的代码进行了一些研究之后TSocket.cpp第 182 行在该方法上显示了完全相同的错误消息openConnection()errno_copy从中获得它的价值errno具有价值111。据此,值对应ECONNREFUSED。所以我会检查另一端的连接。

于 2013-07-18T22:13:44.660 回答