1

EDIT:juan.facorroは、サーバーが実行されていないときにTSocket.cppをmytransport->open()呼び出すという本当の問題を指摘しましGlobalOutput.perror("error code")た。しかし、私のコードでは、初期化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.cpp182 行目にメソッドに関するまったく同じエラー メッセージが表示されますopenConnection()。値を持っているerrno_copyからその値を取得します。これによると、その値は に対応します。だから私は反対側の接続を確認します。errno111ECONNREFUSED

于 2013-07-18T22:13:44.660 に答える