void zctx__socket_destroy (zctx_t *self, void *socket) { assert (self); assert (socket); zsockopt_set_linger (socket, self->linger); zmq_close (socket); zlist_remove (self->sockets, socket); }
void zctx_destroy (zctx_t **self_p) { assert (self_p); if (*self_p) { zctx_t *self = *self_p; while (zlist_size (self->sockets)) { void *socket = zlist_first (self->sockets); zsockopt_set_linger (socket, self->linger); zmq_close (socket); zlist_remove (self->sockets, socket); } zlist_destroy (&self->sockets); if (self->main && self->context) zmq_term (self->context); free (self); *self_p = NULL; } }