![](/img/trans.png)
[英]boost::asio::ip::tcp::acceptor terminates application when receiving connection request using async_accept
[英]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.