使用成员接受器而不是新接受器时,boost :: asio崩溃

时间:2017-11-23 16:51:02

标签: c++ sockets boost boost-asio

我试图将acceptor,socket和endpoint作为成员放入我的班级但遇到了崩溃。套接字必须是这个Question中的shared_ptr,还是为什么它不起作用?

当我尝试在这样的服务器上设置接受器时:

tcp::endpoint ep(boost::asio::ip::address::from_string(localIpAddress), portNumber);
tcp::acceptor a(io_service);
tcp::socket s(io_service);
a.open(ep.protocol());
a.bind(ep);
a.listen(MAX_CONNECTIONS);
a.async_accept(s, boost::bind(&WifiConnector::onAccept, this, boost::asio::placeholders::error));

它在执行期间运行时不会崩溃,但是当我尝试使用属于我的WifiConnector类的成员的套接字/接受器/端点时,它会崩溃。

m_acceptor.open(localEndpoint.protocol()); // it crashes in this line already
m_acceptor.bind(localEndpoint);
m_acceptor.listen(MAX_CONNECTIONS);
m_acceptor.async_accept(socket, boost::bind(&WifiConnector::onAccept, this, boost::asio::placeholders::error));
WifiConnector.hpp中的

声明:

private:
    tcp::socket m_socket;
    tcp::acceptor m_acceptor;
    tcp::endpoint m_localEndpoint;

在类构造函数中初始化:

WifiConnector::WifiConnector() :
    io_service(),
    m_socket(io_service),
    m_acceptor(io_service)
{
    m_localIpAddress    = "192.168.137.1";
    m_portNumber        = 30000;
    m_localEndpoint = tcp::endpoint(boost::asio::ip::address::from_string(m_localIpAddress), m_portNumber);
}

当它崩溃时,我得到以下例外:

boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >

1 个答案:

答案 0 :(得分:-1)

private:
    tcp::socket m_socket;
    tcp::acceptor m_acceptor;
    tcp::endpoint m_localEndpoint;

这不起作用。您正在使用默认构造函数构建,这不是您想要的。首先,您要使用其他所有内容使用的io_service进行构建。

创建属性指针,并在拥有io_service时使用new构造它们。

相关问题