diff options
-rw-r--r-- | gr-blocks/lib/socket_pdu_impl.cc | 9 | ||||
-rw-r--r-- | gr-blocks/lib/tcp_connection.cc | 4 |
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 */ |