From 627190c8bee128032d74ce27e218e28323b535fd Mon Sep 17 00:00:00 2001 From: shripchenko Date: Mon, 10 Jun 2013 02:31:00 -0700 Subject: [PATCH] another iteration on ZMQ_PROBE_ROUTER now it properly works for ROUTER --- src/dealer.cpp | 4 ++-- src/router.cpp | 29 +++++++++++++---------------- tests/test_probe_router.cpp | 4 +--- 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/dealer.cpp b/src/dealer.cpp index 0d39225c..55dd8c8e 100644 --- a/src/dealer.cpp +++ b/src/dealer.cpp @@ -44,8 +44,8 @@ void zmq::dealer_t::xattach_pipe (pipe_t *pipe_, bool icanhasall_) int rc = probe_msg_.init (); errno_assert (rc == 0); - int ok = pipe_->write (&probe_msg_); - zmq_assert (ok); + rc = pipe_->write (&probe_msg_); + // zmq_assert (rc) is not applicable here, since it is not a bug. pipe_->flush (); rc = probe_msg_.close (); diff --git a/src/router.cpp b/src/router.cpp index d5627f87..c4d6d0d8 100644 --- a/src/router.cpp +++ b/src/router.cpp @@ -59,6 +59,19 @@ void zmq::router_t::xattach_pipe (pipe_t *pipe_, bool icanhasall_) zmq_assert (pipe_); + if (probe_router) { + msg_t probe_msg_; + int rc = probe_msg_.init (); + errno_assert (rc == 0); + + rc = pipe_->write (&probe_msg_); + // zmq_assert (rc) is not applicable here, since it is not a bug. + pipe_->flush (); + + rc = probe_msg_.close (); + errno_assert (rc == 0); + } + bool identity_ok = identify_peer (pipe_); if (identity_ok) fq.attach (pipe_); @@ -391,22 +404,6 @@ bool zmq::router_t::identify_peer (pipe_t *pipe_) ok = outpipes.insert (outpipes_t::value_type (identity, outpipe)).second; zmq_assert (ok); - if (probe_router) { - msg_t probe_msg_; - int rc = probe_msg_.init (); - errno_assert (rc == 0); - - ok = pipe_->write (&probe_msg_); - pipe_->flush (); - - rc = probe_msg_.close (); - errno_assert (rc == 0); - - // Ignore not probed peers - if (!ok) - return false; - } - return true; } diff --git a/tests/test_probe_router.cpp b/tests/test_probe_router.cpp index 28cf3650..0c2f553e 100644 --- a/tests/test_probe_router.cpp +++ b/tests/test_probe_router.cpp @@ -35,9 +35,7 @@ int main (void) assert (rc == 0); // Create client and connect to server, doing a probe - void *client = zmq_socket (ctx, ZMQ_DEALER); - // Trying this results in the first recv waiting forever - // void *client = zmq_socket (ctx, ZMQ_ROUTER); + void *client = zmq_socket (ctx, ZMQ_ROUTER); assert (client); rc = zmq_setsockopt (client, ZMQ_IDENTITY, "X", 1); assert (rc == 0);