From 4b7441b010b34e76dc38ef58e67023021fa07176 Mon Sep 17 00:00:00 2001 From: Christopher Wecht Date: Thu, 8 Aug 2019 01:20:34 +0200 Subject: [PATCH] roscpp/transport_tcp: enable poll event POLLRDHUP to detect dead (#1704) connections properly --- clients/roscpp/src/libros/transport/transport_tcp.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/clients/roscpp/src/libros/transport/transport_tcp.cpp b/clients/roscpp/src/libros/transport/transport_tcp.cpp index a4f53fcc4f..3e8a63781b 100644 --- a/clients/roscpp/src/libros/transport/transport_tcp.cpp +++ b/clients/roscpp/src/libros/transport/transport_tcp.cpp @@ -138,6 +138,10 @@ bool TransportTCP::initializeSocket() { ROS_DEBUG("Adding tcp socket [%d] to pollset", sock_); poll_set_->addSocket(sock_, boost::bind(&TransportTCP::socketUpdate, this, _1), shared_from_this()); +#if defined(POLLRDHUP) // POLLRDHUP is not part of POSIX! + // This is needed to detect dead connections. #1704 + poll_set_->addEvents(sock_, POLLRDHUP); +#endif } if (!(flags_ & SYNCHRONOUS)) @@ -690,6 +694,9 @@ void TransportTCP::socketUpdate(int events) if((events & POLLERR) || (events & POLLHUP) || +#if defined(POLLRDHUP) // POLLRDHUP is not part of POSIX! + (events & POLLRDHUP) || +#endif (events & POLLNVAL)) { uint32_t error = -1;