From f8eaa663165897f2477f80b805b435afd35bd17d Mon Sep 17 00:00:00 2001 From: Tom Rondeau <tom@trondeau.com> Date: Sat, 16 Nov 2013 14:56:35 -0500 Subject: blocks: updated UDP source to handle no network connections by allowing use of loopback device. Also fixed an infrequent problem on shutdown before the thread exited. Updated QA code to verify ports used will not clash. --- gr-blocks/lib/udp_sink_impl.cc | 3 ++- gr-blocks/lib/udp_source_impl.cc | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) (limited to 'gr-blocks/lib') diff --git a/gr-blocks/lib/udp_sink_impl.cc b/gr-blocks/lib/udp_sink_impl.cc index a23d3274cb..ae6488f6dd 100644 --- a/gr-blocks/lib/udp_sink_impl.cc +++ b/gr-blocks/lib/udp_sink_impl.cc @@ -77,7 +77,8 @@ namespace gr { if(host.size() > 0) { boost::asio::ip::udp::resolver resolver(d_io_service); boost::asio::ip::udp::resolver::query query(boost::asio::ip::udp::v4(), - host, s_port); + host, s_port, + boost::asio::ip::resolver_query_base::passive); d_endpoint = *resolver.resolve(query); d_socket = new boost::asio::ip::udp::socket(d_io_service); diff --git a/gr-blocks/lib/udp_source_impl.cc b/gr-blocks/lib/udp_source_impl.cc index 7f4a2af3d3..5fa06072ae 100644 --- a/gr-blocks/lib/udp_source_impl.cc +++ b/gr-blocks/lib/udp_source_impl.cc @@ -85,7 +85,8 @@ namespace gr { if(host.size() > 0) { boost::asio::ip::udp::resolver resolver(d_io_service); boost::asio::ip::udp::resolver::query query(boost::asio::ip::udp::v4(), - host, s_port); + d_host, s_port, + boost::asio::ip::resolver_query_base::passive); d_endpoint = *resolver.resolve(query); d_socket = new boost::asio::ip::udp::socket(d_io_service); @@ -113,7 +114,9 @@ namespace gr { if(!d_connected) return; + d_io_service.reset(); d_io_service.stop(); + d_udp_thread.join(); d_socket->close(); delete d_socket; @@ -156,11 +159,11 @@ namespace gr { // Make sure we never go beyond the boundary of the // residual buffer. This will just drop the last bit of // data in the buffer if we've run out of room. - if((int)(d_residual + bytes_transferred) > (50*d_payload_size)) { + if((int)(d_residual + bytes_transferred) >= (50*d_payload_size)) { GR_LOG_WARN(d_logger, "Too much data; dropping packet."); } else { - // otherwise, copy receid data into local buffer for + // otherwise, copy received data into local buffer for // copying later. memcpy(d_residbuf+d_residual, d_rxbuf, bytes_transferred); d_residual += bytes_transferred; -- cgit v1.2.3