• Marc Sune's avatar
    Fix ROUTER's xhas_out() in MANDATORY mode · b7b89a8f
    Marc Sune authored
    Before this commit, xhas_out() was returning true regardless. This
    was correct before the ZMQ_ROUTER_MANDATORY flag as introduced.
    However, ZMQ_POLLOUT.
    
    With this commit, _if_ ZMQ_ROUTER_MANDATORY is set, xhas_out() will
    return false if ALL peer's outgoing pipes are full.
    
    There is an outstanding high-level design question:
    
    If ZMQ_ROUTER_MANDATORY is set, and zmq_poll() waits for ZMQ_POLLOUT
    events, zmq_poll() will immediately wake up if only 1 pipe has
    room to send, regardless of the peer, creating a busy loop of
    zmq_poll() wake-up, zmq_send() (EAGAIN). There is no way for
    the application to selectively wait for ZMQ_POLLOUT for specific
    peer(s), which seems somehow necessary in ZMQ_ROUTER_MANDATORY.
    
    This discussion will be addressed in a separate issue.
    Signed-off-by: 's avatarMarc Sune <marc@voltanet.io>
    Signed-off-by: 's avatarFredi Raspall <fredi@voltanet.io>
    b7b89a8f
router.cpp 15.7 KB