summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouiz’ <louiz@louiz.org>2016-10-03 21:12:16 +0200
committerlouiz’ <louiz@louiz.org>2016-10-03 21:12:16 +0200
commit45aebb8d8a3088058ae65b154496ce1fb2e3d94d (patch)
treedae462db64647b47960fdd339f973e98d4a646bc
parentb29225601a475efe7f28fe7002eba72e70f3272b (diff)
downloadbiboumi-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.cpp3
-rw-r--r--louloulibs/network/poller.cpp5
-rw-r--r--louloulibs/network/poller.hpp4
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:
/**