diff --git a/src/stream.cpp b/src/stream.cpp index 9e5f2f8b..3d1b8b2f 100644 --- a/src/stream.cpp +++ b/src/stream.cpp @@ -245,6 +245,12 @@ bool zmq::stream_t::xhas_in () blob_t identity = pipe->get_identity (); rc = prefetched_id.init_size (identity.size ()); errno_assert (rc == 0); + + // forward metadata (if any) + metadata_t *metadata = prefetched_msg.metadata(); + if (metadata) + prefetched_id.set_metadata(metadata); + memcpy (prefetched_id.data (), identity.data (), identity.size ()); prefetched_id.set_flags (msg_t::more); diff --git a/tests/test_stream.cpp b/tests/test_stream.cpp index 7c7b36ff..e5328545 100644 --- a/tests/test_stream.cpp +++ b/tests/test_stream.cpp @@ -85,6 +85,9 @@ test_stream_to_dealer (void) rc = zmq_recv (stream, buffer, 255, 0); assert (rc == 0); + // Verify the existence of Peer-Address metadata + assert (streq (zmq_msg_gets (&identity, "Peer-Address"), "127.0.0.1")); + // Real data follows // First frame is identity rc = zmq_msg_recv (&identity, stream, 0);