gpt4 book ai didi

c++ - boost::asio 在使用成员接受器而不是新接受器时崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 14:29:26 25 4
gpt4 key购买 nike

我试图将接受器、套接字和端点作为成员放入我的类中,但遇到了崩溃。套接字必须是一个像这样的 shared_ptr Question或者为什么它不起作用?

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

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 构造它们。

关于c++ - boost::asio 在使用成员接受器而不是新接受器时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47460231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com