[zeromq-dev] wrong port type: BIND asserts and CONNECT keeps running

Sven Koebnick sven.koebnick at t-online.de
Tue Apr 23 15:44:21 CEST 2013


Hi @ all!

I'm developing against ZMQ for quite some time now and the distributed 
service architechture is ready and working stable (also under heavy 
load).

(No, I din't update to the latest version because the behaviour doesn't 
look like an accidential bug)

While hardening the system, a queer (but absolutely constant) behaviour 
was found. This seems to be a feature and no bug, so I wonder if I am 
thinking in the wrong way ... and where exactly my mistake is located, 
or if the design of my architecture is wrong or if ZMQ's behaviour is 
wrong:

architecture is as follows:
- I first launch one or more (modified) zmq LRU queues.
- the service queues BIND a service port to which clients and other 
services will CONNECT later.
- the "internal side" of the LRU queues also BIND a socket to which the 
service worker instances CONNECT later for servicing requests etc.

This architecture uses PUP/SUB as well as REQ/REP for sending requests 
to a single service instance (normal work) or for broadcasting 
(initialisation, shutdown of ALL servies or other thing to be done by 
each service instance etc.).

As I said, the SERVICE (SERVER) SIDE does a BIND (of course ;-)
Now the CLIENT SIDE comes along and CONNECTS to the service ports ... 
working fine!

BUT: as soon as I misconfigure the system accidentially and try to e.g. 
connect a client to a service port BUT USE A WRONG SOCKET TYPE (e.g. the 
client creates a PUB socket and tries to connect to the service's PUB 
port), then the following happens:

- the errorneously CONNECTING CLIENT gets a >>>handable<<< error return
- the correctly bound SERVICE >>>ASSERTS<<< and is dead ... not 
handable !!!

My question: Why does the BINDING (server) side assert() and the 
CONNECTING (client) side stays controllable by my code. Shouldn't this 
be exactly the other way? The current implementation ensures that the 
server crashes (via assert) which the offending client keeps running 
happily.

lg
sven


--------------------------------------------------------
E = mc² ± 2dBA ----- everything is relative
--------------------------------------------------------



More information about the zeromq-dev mailing list