mirror of
https://github.com/zeromq/libzmq.git
synced 2025-01-20 00:59:50 +01:00
parent
8cda54c52b
commit
a09407829e
16
src/ctx.cpp
16
src/ctx.cpp
@ -455,18 +455,14 @@ void zmq::ctx_t::connect_inproc_sockets (zmq::socket_base_t *bind_socket_,
|
|||||||
pending_connection_.connect_pipe->set_hwms(hwms [1], hwms [0]);
|
pending_connection_.connect_pipe->set_hwms(hwms [1], hwms [0]);
|
||||||
pending_connection_.bind_pipe->set_hwms(hwms [0], hwms [1]);
|
pending_connection_.bind_pipe->set_hwms(hwms [0], hwms [1]);
|
||||||
|
|
||||||
if (bind_options.recv_identity) {
|
if (!bind_options.recv_identity) {
|
||||||
|
msg_t msg;
|
||||||
msg_t id;
|
const bool ok = pending_connection_.bind_pipe->read (&msg);
|
||||||
int rc = id.init_size (pending_connection_.endpoint.options.identity_size);
|
zmq_assert (ok);
|
||||||
|
const int rc = msg.close ();
|
||||||
errno_assert (rc == 0);
|
errno_assert (rc == 0);
|
||||||
memcpy (id.data (), pending_connection_.endpoint.options.identity,
|
|
||||||
pending_connection_.endpoint.options.identity_size);
|
|
||||||
id.set_flags (msg_t::identity);
|
|
||||||
bool written = pending_connection_.connect_pipe->write (&id);
|
|
||||||
zmq_assert (written);
|
|
||||||
pending_connection_.connect_pipe->flush ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pending_connection_.endpoint.options.recv_identity) {
|
if (pending_connection_.endpoint.options.recv_identity) {
|
||||||
msg_t id;
|
msg_t id;
|
||||||
int rc = id.init_size (bind_options.identity_size);
|
int rc = id.init_size (bind_options.identity_size);
|
||||||
|
@ -169,7 +169,7 @@ read_message:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(msg_->flags () & msg_t::more))
|
if (!(msg_->flags () & msg_t::more) && !msg_->is_identity ())
|
||||||
msgs_read++;
|
msgs_read++;
|
||||||
|
|
||||||
if (lwm > 0 && msgs_read % lwm == 0)
|
if (lwm > 0 && msgs_read % lwm == 0)
|
||||||
@ -199,8 +199,9 @@ bool zmq::pipe_t::write (msg_t *msg_)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
bool more = msg_->flags () & msg_t::more ? true : false;
|
bool more = msg_->flags () & msg_t::more ? true : false;
|
||||||
|
const bool is_identity = msg_->is_identity ();
|
||||||
outpipe->write (*msg_, more);
|
outpipe->write (*msg_, more);
|
||||||
if (!more)
|
if (!more && !is_identity)
|
||||||
msgs_written++;
|
msgs_written++;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -503,8 +503,20 @@ int zmq::socket_base_t::connect (const char *addr_)
|
|||||||
// Attach local end of the pipe to this socket object.
|
// Attach local end of the pipe to this socket object.
|
||||||
attach_pipe (new_pipes [0]);
|
attach_pipe (new_pipes [0]);
|
||||||
|
|
||||||
if (!peer.socket)
|
if (!peer.socket) {
|
||||||
{
|
// The peer doesn't exist yet so we don't know whether
|
||||||
|
// to send the identity message or not. To resolve this,
|
||||||
|
// we always send our identity and drop it later if
|
||||||
|
// the peer doesn't expect it.
|
||||||
|
msg_t id;
|
||||||
|
rc = id.init_size (options.identity_size);
|
||||||
|
errno_assert (rc == 0);
|
||||||
|
memcpy (id.data (), options.identity, options.identity_size);
|
||||||
|
id.set_flags (msg_t::identity);
|
||||||
|
bool written = new_pipes [0]->write (&id);
|
||||||
|
zmq_assert (written);
|
||||||
|
new_pipes [0]->flush ();
|
||||||
|
|
||||||
endpoint_t endpoint = {this, options};
|
endpoint_t endpoint = {this, options};
|
||||||
pending_connection_t pending_connection = {endpoint, new_pipes [0], new_pipes [1]};
|
pending_connection_t pending_connection = {endpoint, new_pipes [0], new_pipes [1]};
|
||||||
pend_connection (addr_, pending_connection);
|
pend_connection (addr_, pending_connection);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user