mirror of
https://github.com/zeromq/libzmq.git
synced 2025-11-06 21:56:25 +01:00
Fix a number of whitespace issues in various parts of the code, add validation to most calls on the test and take a first stab at implementing the reconnection pipe blocking.
It didn't seem straightforward to use any of the existing process calls, so I have added a new command to command_t and friends called detach. This instructs the socket_base to remove the pipe from it's pipe list. The session base stores a copy of the outpipe, and will resend the bind command on reconnection. This should allow balancing again.
This commit is contained in:
@@ -529,13 +529,13 @@ int zmq::socket_base_t::connect (const char *addr_)
|
||||
session_base_t *session = session_base_t::create (io_thread, true, this,
|
||||
options, paddr);
|
||||
errno_assert (session);
|
||||
|
||||
|
||||
// PGM does not support subscription forwarding; ask for all data to be
|
||||
// sent to this pipe.
|
||||
bool icanhasall = false;
|
||||
if (protocol == "pgm" || protocol == "epgm")
|
||||
icanhasall = true;
|
||||
|
||||
|
||||
if (options.delay_attach_on_connect != 1 && icanhasall != true) {
|
||||
// Create a bi-directional pipe.
|
||||
object_t *parents [2] = {this, session};
|
||||
@@ -547,7 +547,7 @@ int zmq::socket_base_t::connect (const char *addr_)
|
||||
|
||||
// Attach local end of the pipe to the socket object.
|
||||
attach_pipe (pipes [0], icanhasall);
|
||||
|
||||
|
||||
// Attach remote end of the pipe to the session object later on.
|
||||
session->attach_pipe (pipes [1]);
|
||||
}
|
||||
@@ -876,6 +876,17 @@ void zmq::socket_base_t::process_destroy ()
|
||||
destroyed = true;
|
||||
}
|
||||
|
||||
void zmq::socket_base_t::process_detach (pipe_t *pipe_)
|
||||
{
|
||||
// If we are blocking connecting threads, drop this one
|
||||
if (options.delay_attach_on_connect == 1) {
|
||||
zmq_assert (pipe_);
|
||||
pipes.erase (pipe_);
|
||||
// Let derived sockets know we're ditching this pipe
|
||||
xterminated (pipe_);
|
||||
}
|
||||
}
|
||||
|
||||
int zmq::socket_base_t::xsetsockopt (int option_, const void *optval_,
|
||||
size_t optvallen_)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user