summaryrefslogtreecommitdiff
path: root/gr-zeromq/lib/pub_msg_sink_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-zeromq/lib/pub_msg_sink_impl.cc')
-rw-r--r--gr-zeromq/lib/pub_msg_sink_impl.cc15
1 files changed, 11 insertions, 4 deletions
diff --git a/gr-zeromq/lib/pub_msg_sink_impl.cc b/gr-zeromq/lib/pub_msg_sink_impl.cc
index d4a0179f09..ca78a8ea8d 100644
--- a/gr-zeromq/lib/pub_msg_sink_impl.cc
+++ b/gr-zeromq/lib/pub_msg_sink_impl.cc
@@ -19,12 +19,12 @@
namespace gr {
namespace zeromq {
-pub_msg_sink::sptr pub_msg_sink::make(char* address, int timeout)
+pub_msg_sink::sptr pub_msg_sink::make(char* address, int timeout, bool bind)
{
- return gnuradio::get_initial_sptr(new pub_msg_sink_impl(address, timeout));
+ return gnuradio::get_initial_sptr(new pub_msg_sink_impl(address, timeout, bind));
}
-pub_msg_sink_impl::pub_msg_sink_impl(char* address, int timeout)
+pub_msg_sink_impl::pub_msg_sink_impl(char* address, int timeout, bool bind)
: gr::block("pub_msg_sink",
gr::io_signature::make(0, 0, 0),
gr::io_signature::make(0, 0, 0)),
@@ -32,15 +32,22 @@ pub_msg_sink_impl::pub_msg_sink_impl(char* address, int timeout)
{
int major, minor, patch;
zmq::version(&major, &minor, &patch);
+
if (major < 3) {
d_timeout = timeout * 1000;
}
d_context = new zmq::context_t(1);
d_socket = new zmq::socket_t(*d_context, ZMQ_PUB);
+
int time = 0;
d_socket->setsockopt(ZMQ_LINGER, &time, sizeof(time));
- d_socket->bind(address);
+
+ if (bind) {
+ d_socket->bind(address);
+ } else {
+ d_socket->connect(address);
+ }
message_port_register_in(pmt::mp("in"));
set_msg_handler(pmt::mp("in"), boost::bind(&pub_msg_sink_impl::handler, this, _1));