diff options
author | Tom Rondeau <tom@trondeau.com> | 2013-11-16 14:56:35 -0500 |
---|---|---|
committer | Tom Rondeau <tom@trondeau.com> | 2013-11-16 16:02:44 -0500 |
commit | f8eaa663165897f2477f80b805b435afd35bd17d (patch) | |
tree | 75c3bf210559ea143dcb0d54ca8a3e1bcd63e9aa | |
parent | a0831c51094c4adb9ffba63ffe3bcccc480d19d6 (diff) |
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.
-rw-r--r-- | gr-blocks/lib/udp_sink_impl.cc | 3 | ||||
-rw-r--r-- | gr-blocks/lib/udp_source_impl.cc | 9 | ||||
-rw-r--r-- | gr-blocks/python/blocks/qa_udp_source_sink.py | 8 |
3 files changed, 13 insertions, 7 deletions
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; diff --git a/gr-blocks/python/blocks/qa_udp_source_sink.py b/gr-blocks/python/blocks/qa_udp_source_sink.py index b96d393a50..a8dcdef5ea 100644 --- a/gr-blocks/python/blocks/qa_udp_source_sink.py +++ b/gr-blocks/python/blocks/qa_udp_source_sink.py @@ -39,7 +39,7 @@ class test_udp_sink_source(gr_unittest.TestCase): def test_001(self): # Tests calling disconnect/reconnect. - port = 65500 + port = 65510 n_data = 16 src_data = [x for x in range(n_data)] @@ -56,7 +56,7 @@ class test_udp_sink_source(gr_unittest.TestCase): self.tb_snd.run() def test_002(self): - port = 65500 + port = 65520 n_data = 100 src_data = [float(x) for x in range(n_data)] @@ -83,10 +83,12 @@ class test_udp_sink_source(gr_unittest.TestCase): self.assert_(not self.timeout) def test_003(self): + port = 65530 + udp_rcv = blocks.udp_source(gr.sizeof_float, '0.0.0.0', 0, eof=False) rcv_port = udp_rcv.get_port() - udp_snd = blocks.udp_sink(gr.sizeof_float, '127.0.0.1', 65500) + udp_snd = blocks.udp_sink(gr.sizeof_float, '127.0.0.1', port) udp_snd.connect('localhost', rcv_port) n_data = 16 |