diff options
author | louiz’ <louiz@louiz.org> | 2016-10-03 21:12:16 +0200 |
---|---|---|
committer | louiz’ <louiz@louiz.org> | 2016-10-03 21:12:16 +0200 |
commit | 45aebb8d8a3088058ae65b154496ce1fb2e3d94d (patch) | |
tree | dae462db64647b47960fdd339f973e98d4a646bc | |
parent | b29225601a475efe7f28fe7002eba72e70f3272b (diff) | |
download | biboumi-45aebb8d8a3088058ae65b154496ce1fb2e3d94d.tar.gz biboumi-45aebb8d8a3088058ae65b154496ce1fb2e3d94d.tar.bz2 biboumi-45aebb8d8a3088058ae65b154496ce1fb2e3d94d.tar.xz biboumi-45aebb8d8a3088058ae65b154496ce1fb2e3d94d.zip |
Avoid an exception due to some bad logic in the DNS resolution mechanic
fix #3207
-rw-r--r-- | louloulibs/network/dns_socket_handler.cpp | 3 | ||||
-rw-r--r-- | louloulibs/network/poller.cpp | 5 | ||||
-rw-r--r-- | louloulibs/network/poller.hpp | 4 |
3 files changed, 11 insertions, 1 deletions
diff --git a/louloulibs/network/dns_socket_handler.cpp b/louloulibs/network/dns_socket_handler.cpp index 5fd08cb..403a5be 100644 --- a/louloulibs/network/dns_socket_handler.cpp +++ b/louloulibs/network/dns_socket_handler.cpp @@ -42,7 +42,8 @@ bool DNSSocketHandler::is_connected() const void DNSSocketHandler::remove_from_poller() { - this->poller->remove_socket_handler(this->socket); + if (this->poller->is_managing_socket(this->socket)) + this->poller->remove_socket_handler(this->socket); } #endif /* CARES_FOUND */ diff --git a/louloulibs/network/poller.cpp b/louloulibs/network/poller.cpp index 8a6fd97..d341bb5 100644 --- a/louloulibs/network/poller.cpp +++ b/louloulibs/network/poller.cpp @@ -226,3 +226,8 @@ size_t Poller::size() const { return this->socket_handlers.size(); } + +bool Poller::is_managing_socket(const socket_t socket) const +{ + return (this->socket_handlers.find(socket) != this->socket_handlers.end()); +} diff --git a/louloulibs/network/poller.hpp b/louloulibs/network/poller.hpp index fc1a1a1..e39e438 100644 --- a/louloulibs/network/poller.hpp +++ b/louloulibs/network/poller.hpp @@ -74,6 +74,10 @@ public: * Returns the number of SocketHandlers managed by the poller. */ size_t size() const; + /** + * Whether the given socket is managed by the poller + */ + bool is_managing_socket(const socket_t socket) const; private: /** |