Ich versuche, den Akzeptor, Socket und Endpunkt als Mitglieder in meine Klasse zu setzen, aber lief in Abstürze. Muss der Socket ein shared_ptr wie in diesem Question sein oder warum funktioniert das nicht?boost :: asio Absturz bei der Verwendung eines Mitglieds Akzeptor anstelle eines neuen
Wenn ich versuche, auf einem Server wie folgt ein Akzeptor-Setup:
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));
es läuft ohne während der Ausführung abstürzt, aber wenn ich versuche, eine Buchse/Akzeptor/Endpunkt zu verwenden, die Mitglied von meiner WifiConnector-Klasse stürzt ab.
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));
Erklärung in WifiConnector.hpp:
private:
tcp::socket m_socket;
tcp::acceptor m_acceptor;
tcp::endpoint m_localEndpoint;
Initialisierung bei Klassenkonstruktors:
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);
}
, wenn er abstürzt, erhalte ich die folgende Ausnahme:
boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >
Angesichts der Tatsache, dass das Problem auftritt, wenn Sie den Code in eine Klasse umgestalten, denke ich, dass Sie wirklich eine [MCVE] bereitstellen müssen. Ist das nicht möglich, können Sie zumindest die Deklaration von 'WifiConnector :: io_service' anzeigen? –