• Tim M's avatar
    Both STREAM and ROUTER sockets suffer from a naming problem on outbound… · 5d4860ea
    Tim M authored
    Both STREAM and ROUTER sockets suffer from a naming problem on outbound connections. While these connections can be created, they can't be immediately used. Traffic must be received before it can be sent. This prevents practical, minimal usage of STREAM or ROUTER as a true N fan in/out socket.
    
    This change simply provides the user with a socket option that sets a user defined name of the next outbound connection:
    
    zmq_setsockopt(routerSock,ZMQ_NEXT_IDENTITY,"myname",6);
    if(0 > zmq_connect(routerSock,"tcp://127.0.0.1:1234")) return 1;
    ret = zmq_send(routerSock,"myname",6,ZMQ_SNDMORE);
    zmq_send(routerSock,b.mem,b.used,0);
    
    In this example, the socket is immediately given the name "myname", and is capable of immediately sending traffic.
    
    This approach is more effective in three ways:
    1) It prevents all sorts of malicious peer naming attacks that can cause undefined behavior in existing ROUTER connections. (Two connections are made that both transmit the same name to the ROUTER, the ROUTER behavior is undefined)
    2) It allows immediate control of connections made to external parties for STREAM sockets. Something that is not possible right now. Before an outbound connection had no name for STREAM or ROUTER sockets because outbound connections cannot be sent to without first receiving traffic.
    3) It is simpler and more general than expecting two ROUTER sockets to handshake on assigned connection names. Plus it allows inline sending to new connections on ROUTER.
    5d4860ea
Name
Last commit
Last update
builds Loading commit data...
doc Loading commit data...
foreign/openpgm Loading commit data...
include Loading commit data...
perf Loading commit data...
src Loading commit data...
tests Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
.hgeol Loading commit data...
.travis.yml Loading commit data...
AUTHORS Loading commit data...
CMakeLists.txt Loading commit data...
COPYING Loading commit data...
COPYING.LESSER Loading commit data...
INSTALL Loading commit data...
MAINTAINERS Loading commit data...
Makefile.am Loading commit data...
NEWS Loading commit data...
README.md Loading commit data...
acinclude.m4 Loading commit data...
autogen.sh Loading commit data...
branding.bmp Loading commit data...
configure.ac Loading commit data...
installer.ico Loading commit data...
version.sh Loading commit data...