[zeromq-dev] How to disconnect a peer?
Goswin von Brederlow
goswin-v-b at web.de
Thu Aug 28 17:33:46 CEST 2014
I've been thinking of error scenarios for my PPPP protocol and one of
the cases is a peer connecting to the server and becoming
unresponsive. This could be accidental or a malicious peer.
So what happens in that case?
- zmq puts messages into the kernel buffers
- zmq puts messages into the pipe (default 1000 messages)
- No messages (real or heartbeat) come back from the client
So one of 2 things happens:
1) the SNDHWM is reached and messages can't be send
2) the peer misses too many heartbeats
Both cases flag the peer first as LATE and then as DEAD.
I free up all the resources for a DEAD peer that I hold but what about
resources zmq holds? There could be up to 1000 messages in the pipe
and whatever the kernel buffer holds. Also there is a file descriptor
and the peer identity and metadata are kept. That could add up to
quite a bit.
So here is my question:
How do I disconnect a single peer from a ROUTER socket?
The closest in the API seems to be zmq_disconnect(). But a) I didn't
connect to the peer, the peer connected to me, and b) I don't have an
endpoint, only a peer identity.
And I can't tell the peer to disconnect since it is unresponsive.
Is that something that should be there but is missing?
PS: my code would also be pretty confused when a DEAD peer suddenly
becomes alive again. And the tcp timeout is generally higher than my
More information about the zeromq-dev