int zyre_peer_send (zyre_peer_t *self, zre_msg_t **msg_p) { assert (self); zre_msg_t *msg = *msg_p; assert (msg); if (self->connected) { self->sent_sequence += 1; zre_msg_set_sequence (msg, self->sent_sequence); if (self->verbose) zsys_info ("(%s) send %s to peer=%s sequence=%d", self->origin, zre_msg_command (msg), self->name? self->name: "-", zre_msg_sequence (msg)); if (zre_msg_send (msg, self->mailbox)) { if (errno == EAGAIN) { if (self->verbose) zsys_info ("(%s) disconnect from peer (EAGAIN): name=%s", self->origin, self->name); zyre_peer_disconnect (self); return -1; } // Can't get any other error here assert (false); } } zre_msg_destroy (msg_p); return 0; }
static int zyre_node_purge_peer (const char *key, void *item, void *argument) { zyre_peer_t *peer = (zyre_peer_t *) item; char *endpoint = (char *) argument; if (streq (zyre_peer_endpoint (peer), endpoint)) zyre_peer_disconnect (peer); return 0; }
void zyre_peer_destroy (zyre_peer_t **self_p) { assert (self_p); if (*self_p) { zyre_peer_t *self = *self_p; zyre_peer_disconnect (self); zhash_destroy (&self->headers); zuuid_destroy (&self->uuid); free (self->name); free (self->origin); free (self); *self_p = NULL; } }