Boost Asio: Exception bei connect
-
Hallo!
Folgender Code:
void net::TcpClientMessageSocket::connect(char const* host, char const* port) { boost::asio::ip::tcp::resolver resolver(ioPool->getIoService()); boost::asio::ip::tcp::resolver::iterator iter = resolver.resolve(boost::asio::ip::tcp::resolver::query(host, port)); // Try each available endpoint. boost::system::error_code ec; for (; iter != boost::asio::ip::tcp::resolver::iterator(); ++iter) { std::cout << "Current endpoint - Address:" << iter->endpoint().address().to_string() << " Port: " << iter->endpoint().port() << std::endl; socket.connect(*iter, ec); if (!ec) { return; } } // Could not connect to any endpoint. throw boost::system::system_error(ec, "connect"); }
Beim Versuch, den Code gegen localhost:12345 auszuführen, fliegt folgende Exception:
connect: Bei dem Versuch das Zeigerargument eines Aufrufs zu
verwenden, wurde eine ungültige Zeigeradresse gefundenIch habe bis in die Socket-Opts hineindebuggt:
void sync_connect(socket_type s, const socket_addr_type* addr, std::size_t addrlen, boost::system::error_code& ec) { ... }
Hier ist addr (was eine sockaddr* ist) 0xCCCCCCCCCCCCCCCC, also wohl uninitialisierter Speicher. Wie passiert das?
Ich vermute einen dummen Fehler, den ich einfach übersehe.
Jemand eine Idee?
Danke & schöne Grüße,
Ethon
-
Ist zwar keine echte Antwort, aber 0xCCCC… ist eine Debug-Hilfe vom Microsoft-Compiler.
0xFDFDFDFD No man's land (normally outside of a process) 0xDDDDDDDD Freed memory 0xCDCDCDCD Uninitialized (global) 0xCCCCCCCC Uninitialized locals (on the stack)
Aus https://msdn.microsoft.com/en-us/library/aa260966(v=vs.60).aspx
Das grenzt Deine Suche ein wenig ein, ja, es ist wie Du vermutest.
-
Davon ging ich auch aus.
Habe jetzt zufälligerweise die freie connect Funktion gefunden, Problem gelöst:
void net::TcpClientMessageSocket::connect(char const* host, char const* port) { boost::asio::ip::tcp::resolver resolver(ioPool->getIoService()); boost::asio::ip::tcp::resolver::query query(host, port); // Try each available endpoint. boost::asio::connect(socket, resolver.resolve(query)); }
Auflösung, was war meine Dummheit?