label parts return false for getsockopt(ZM_RCVMORE); should return true if there are more parts available
Description
Environment
OSX intel, 3.02 master
Activity
Show:
Ian Barber September 18, 2012 at 6:36 AM
Labels functionality reverted
PieterP September 20, 2011 at 8:42 PM
OK, fixed and tested in 3-0 git master, thanks for the test case.
Chuck Remes September 17, 2011 at 7:49 PM
Testcase added to issues (255/3-0) to illustrate the problem. The above patch did not fix it for me.
PieterP September 16, 2011 at 5:04 PM
Fixed in 3-0 master, here's the patch:
diff --git a/src/socket_base.cpp b/src/socket_base.cpp
index 89cf835..543e3d2 100644
--- a/src/socket_base.cpp
+++ b/src/socket_base.cpp
@@ -596,7 +596,7 @@ int zmq::socket_base_t::recv (msg_t *msg_, int flags_)
if (rcvlabel)
msg_->reset_flags (msg_t::label);
rcvmore = msg_->flags () & msg_t::more ? true : false;
- if (rcvmore)
+ if (rcvmore || rcvlabel)
msg_->reset_flags (msg_t::more);
return 0;
}
@@ -617,7 +617,7 @@ int zmq::socket_base_t::recv (msg_t *msg_, int flags_)
if (rcvlabel)
msg_->reset_flags (msg_t::label);
rcvmore = msg_->flags () & msg_t::more ? true : false;
- if (rcvmore)
+ if (rcvmore || rcvlabel)
msg_->reset_flags (msg_t::more);
return 0;
}
@@ -656,7 +656,7 @@ int zmq::socket_base_t::recv (msg_t *msg_, int flags_)
if (rcvlabel)
msg_->reset_flags (msg_t::label);
rcvmore = msg_->flags () & msg_t::more ? true : false;
- if (rcvmore)
+ if (rcvmore || rcvlabel)
msg_->reset_flags (msg_t::more);
return 0;
}
Sending a message from a REQ socket to a XREP socket exposes all of the message parts generated by the system. The label parts used for routing over multiple hops do not return true when getsockopt(ZM_RCVMORE) is called. A message comprised of only labels is invalid, so clearly there are additional message parts available. This getsockopt() call should return true.