static void pinger_cb(struct ev_loop *loop, struct ev_timer *w, int revents) { struct bb_pinger *pinger = (struct bb_pinger *) w; struct bb_dealer *bbd = pinger->vhost->dealers; // get events before starting a potentially long write session ev_feed_event(blastbeat.loop, &blastbeat.event_zmq, EV_READ); while(bbd) { bb_raw_zmq_send_msg(bbd->identity, bbd->len, "", 0, "ping", 4, "", 0); bbd = bbd->next; } }
static void pinger_cb(struct ev_loop *loop, struct ev_timer *w, int revents) { struct bb_dealer *bbd = blastbeat.dealers; // get events before starting a potentially long write session ev_feed_event(blastbeat.loop, &blastbeat.event_zmq, EV_READ); time_t now = time(NULL); while(bbd) { if (now - bbd->last_seen > blastbeat.ping_freq) { bb_raw_zmq_send_msg(bbd->identity, bbd->len, "", 0, "ping", 4, "", 0); } bbd = bbd->next; } }
void bb_zmq_send_msg(char *identity, size_t identity_len, char *sid, size_t sid_len, char *t, size_t t_len, char *body, size_t body_len) { ev_feed_event(blastbeat.loop, &blastbeat.event_zmq, EV_READ); bb_raw_zmq_send_msg(identity, identity_len, sid, sid_len, t, t_len, body, body_len); }