Expose remote FD via zmq_msg_get(&msg, ZMQ_SRCFD)

This patch allows client applications to retrieve the remote endpoint from a message that originated from a tcp socket
This commit is contained in:
Stefan Radomski
2014-01-06 10:31:42 +01:00
parent 08d897b174
commit f30fb8501e
8 changed files with 53 additions and 0 deletions

View File

@@ -67,6 +67,7 @@ int zmq::msg_t::init_size (size_t size_)
u.lmsg.content->size = size_;
u.lmsg.content->ffn = NULL;
u.lmsg.content->hint = NULL;
u.lmsg.content->fd = -1;
new (&u.lmsg.content->refcnt) zmq::atomic_counter_t ();
}
return 0;
@@ -99,6 +100,7 @@ int zmq::msg_t::init_data (void *data_, size_t size_, msg_free_fn *ffn_,
u.lmsg.content->size = size_;
u.lmsg.content->ffn = ffn_;
u.lmsg.content->hint = hint_;
u.lmsg.content->fd = -1;
new (&u.lmsg.content->refcnt) zmq::atomic_counter_t ();
}
return 0;
@@ -247,6 +249,19 @@ void zmq::msg_t::reset_flags (unsigned char flags_)
u.base.flags &= ~flags_;
}
zmq::fd_t zmq::msg_t::fd ()
{
if (u.base.type == type_lmsg)
return u.lmsg.content->fd;
return -1;
}
void zmq::msg_t::set_fd (fd_t fd_)
{
if (u.base.type == type_lmsg)
u.lmsg.content->fd = fd_;
}
bool zmq::msg_t::is_identity () const
{
return (u.base.flags & identity) == identity;