summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gr-blocks/lib/socket_pdu_impl.cc9
-rw-r--r--gr-blocks/lib/tcp_connection.cc4
2 files changed, 13 insertions, 0 deletions
diff --git a/gr-blocks/lib/socket_pdu_impl.cc b/gr-blocks/lib/socket_pdu_impl.cc
index cc45557bca..efb778f404 100644
--- a/gr-blocks/lib/socket_pdu_impl.cc
+++ b/gr-blocks/lib/socket_pdu_impl.cc
@@ -184,6 +184,15 @@ namespace gr {
socket_pdu_impl::handle_tcp_accept(tcp_connection::sptr new_connection, const boost::system::error_code& error)
{
if (!error) {
+ // Garbage collect closed sockets
+ std::vector<tcp_connection::sptr>::iterator it = d_tcp_connections.begin();
+ while(it != d_tcp_connections.end()) {
+ if (! (**it).socket().is_open())
+ it = d_tcp_connections.erase(it);
+ else
+ ++it;
+ }
+
new_connection->start(this);
d_tcp_connections.push_back(new_connection);
start_tcp_accept();
diff --git a/gr-blocks/lib/tcp_connection.cc b/gr-blocks/lib/tcp_connection.cc
index b28accccf7..200e82b89f 100644
--- a/gr-blocks/lib/tcp_connection.cc
+++ b/gr-blocks/lib/tcp_connection.cc
@@ -102,6 +102,10 @@ namespace gr {
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
+ else {
+ d_socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both);
+ d_socket.close();
+ }
}
} /* namespace blocks */
}/* namespace gr */