问题
I'm using C++ binding for ZMQ (cppzmq) and I'm trying to set the connection timeout of TCP socket using a .setsockopt()
-method like this:
int connectTimeout = 1000;
socket.setsockopt(ZMQ_CONNECT_TIMEOUT, &connectTimeout, sizeof(connectTimeout));
socket.connect(clientConfiguration.uri);
However, I dont see anything (exception thrown?) happening until code reaches actual .send()/.recv()
on the socket. Just to make sure the socket has a chance to throw I put a sleep between .connect()
and .send()
methods.
According to the documentation .zmq_connect()
just enters a READY
-state without making actual connection to the endpoint. So the question is when and how I should experience the connection timeout?
回答1:
So the question is when and how I should experience the connection timeout ?
When ?
Well, actually never directly as this is just the API-exposed setting of ZeroMQ Context()
-instances' internal Finite-State-Machine modus operandi ( here the .setsockopt()
sets the selected transport-class behind-the-API-curtain ISO-OSI-L3 details ).
How( if at all ) ?
Well, there are some other .setsockopt()
details, that ( if put on ) may indirectly sense the impact of the set ZMQ_CONNECT_TIMEOUT
connection timeout. Here again, only indirectly, by a modified FSM-behaviour, i.e. in a way, how the .Context()
-engine instance will happen to respond to such event ( all purely internally, behind the Curtain of API - that's why we methodologically use the API method for separation of concerns, don't we ? ).
For further details ref.:
- API details about
ZMQ_IMMEDIATE
, - API details about
ZMQ_RECONNECT_IVL
, - API details about
ZMQ_RECONNECT_IVL_MAX
.
( API versions evolve, be aware that not all distributed-system agents share the same ZeroMQ API version. So best remember the Zen-of-Zero and feel free to re-use the anxient designers' directive#ASSUME NOTHING
. )
A TRAILER BONUS :
If not familiar with the ZeroMQ instrumentation, one may find useful this 5-seconds read into the main conceptual differences in the [ ZeroMQ hierarchy in less than a five seconds ] Section,
( courtesy Martin Sústrik, co-father of both ZeroMQ + nanomsg. Respect! )
来源:https://stackoverflow.com/questions/50895827/zmq-socket-connection-timeout