The zmq_close() function shall destroy the socket referenced by the socket argument. Any outstanding
messages physically received from the network but not yet received by the application with zmq_recv()
shall be discarded. The behaviour for discarding messages sent by the application with zmq_send() but not
yet physically transferred to the network depends on the value of the ZMQ_LINGER socket option for the
specified socket.
zmq_close() must be called exactly once for each socket. If it is never called, zmq_ctx_term() will block
forever. If it is called multiple times for the same socket or if socket does not point to a socket, the
behaviour is undefined.
Note
The default setting of ZMQ_LINGER does not discard unsent messages; this behaviour may cause the
application to block when calling zmq_ctx_term(). For details refer to zmq_setsockopt(3) and
zmq_ctx_term(3).
Note
This API will complete asynchronously, so not everything will be deallocated after it returns. See
above for details about linger.