OS:Linux 64ビットARCH。ブーストASIO非同期アクセプタがリスニングポートを開かない
BOOST:1.46.1
コンパイラ:打ち鳴らす++/GCC。
boost :: asioの例(Chat Server)でモデル化されたtcpアクセプタのワイヤアップを持つコードフラグメントがあります。しかし、私がフラグメントを実行すると、リッスンしているTCPソケットがnetstat listen(linux)に表示されません。しかし、チャットサーバの例がコンパイルされると表示されます。誰かが私が間違っていることを指摘してもらえますか?
#include <boost/asio.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/bind.hpp>
#include <list>
#include <iostream>
using namespace boost::asio;
using namespace boost::asio::ip;
class ClientConnection
{
public:
ClientConnection(io_service & io_s)
: m_socket(io_s) {}
tcp::socket & socket() { return m_socket; }
private:
tcp::socket m_socket;
};
typedef boost::shared_ptr<ClientConnection> client_connection_ptr;
class ClientConnectionAcceptor
{
public:
ClientConnectionAcceptor(unsigned short port)
: m_io_service(),
m_port(port),
m_endpoint(tcp::v4(), m_port),
m_acceptor(m_io_service, m_endpoint)
{
std::cout << "acceptor is open : " << m_acceptor.is_open() << std::endl;
client_connection_ptr ccp(new ClientConnection(m_io_service));
m_acceptor.async_accept(
ccp->socket(),
boost::bind(&ClientConnectionAcceptor::handle_accept,this,
ccp, placeholders::error));
}
void handle_accept(client_connection_ptr ccp, const boost::system::error_code & error)
{
std::cout << "in handle_accept" << std::endl;
if(!error)
{
// m_rpc_oracle.AddNewClient(ccp);
client_connection_ptr new_ccp(new ClientConnection(m_io_service));
m_acceptor.async_accept(
new_ccp->socket(),
boost::bind(&ClientConnectionAcceptor::handle_accept,this,
ccp, placeholders::error));
}
}
io_service & io_service() { return m_io_service; }
private:
boost::asio::io_service m_io_service;
tcp::endpoint m_endpoint;
tcp::acceptor m_acceptor;
unsigned short m_port;
};
int main()
{
ClientConnectionAcceptor acceptor(5000);
acceptor.io_service().run();
}
うわー、それは問題を解決しました、ありがとうございます。おそらく、初期化リストの初期化順序と関係があります。私はそれがトップダウンだと思った。 –
http://stackoverflow.com/questions/4037219/order-of-execution-in-constructor-initialization-listユーザー "インシリコ"の応答、私の仮定は、そのイニシャライザのリスト順序は、評価の順序を決定した。しかしそれは順序を決定する宣言の順序です。私はまだそれを試してみる必要があります。 –
それはあなたの質問に答えますか、それとも他に何かありましたか? – aardvarkk