簡體   English   中英

使用成員接受器而不是新成員時,boost :: asio崩潰

[英]boost::asio crash when using a member acceptor instead of new one

我試圖將接受者,套接字和端點作為成員放入我的班級,但遇到崩潰。 套接字必須像本問題中那樣是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> >
private:
    tcp::socket m_socket;
    tcp::acceptor m_acceptor;
    tcp::endpoint m_localEndpoint;

這是行不通的。 您正在使用默認構造函數進行構造,這不是您想要的。 一方面,您想使用其他所有東西使用的io_service進行構造。

創建屬性指針,並在擁有io_service時使用new構造它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM