/*
* call-seq:
* zmq.close() -> nil
*
* Terminates the 0MQ context.
*
* Context termination is performed in the following steps:
*
* 1. Any blocking operations currently in progress on sockets open
* within context shall return immediately with an error code of
* ETERM. With the exception of ZMQ::Socket#close(), any further operations on
* sockets open within context shall fail with an error code of ETERM.
*
* 2. After interrupting all blocking calls, zmq_term() shall block until
* the following conditions are satisfied:
* * All sockets open within context have been closed with ZMQ::Socket#close().
* * For each socket within context, all messages sent by the
* application with ZMQ::Socket#send() have either been physically
* transferred to a network peer, or the socket’s linger period
* set with the ZMQ::LINGER socket option has expired.
*
* For further details regarding socket linger behaviour refer to the
* ZMQ::LINGER option in ZMQ::Socket#setsockopt().
*/
static VALUE context_close (VALUE self_)
{
void * ctx = NULL;
Data_Get_Struct (self_, void, ctx);
if (ctx != NULL) {
int rc = zmq_term (ctx);
assert (rc == 0);
DATA_PTR (self_) = NULL;
}
return Qnil;
}