int main(int argc, char const * const *argv) { int rc; zsys_set_sndhwm(1); zsys_set_linger(100); void *pusher = zsock_new(ZMQ_PUSH); assert(pusher); zsock_set_sndhwm(pusher, 1000); zsock_set_linger(pusher, 500); rc = zsock_connect(pusher, "tcp://localhost:12345"); assert(rc==0); void *puller = zsock_new(ZMQ_PULL); assert(puller); zsock_set_rcvhwm(puller, 1000); zsock_set_linger(puller, 500); rc = zsock_bind(puller, "tcp://*:12345"); if (rc != 12345){ printf("bind failed: %s\n", zmq_strerror(errno)); } assert(rc == 12345); void *publisher = zsock_new(ZMQ_PUB); assert(publisher); zsock_set_sndhwm(publisher, 1000); zsock_set_linger(publisher, 500); rc = zsock_bind(publisher, "tcp://*:12346"); assert(rc==12346); // set up event loop zloop_t *loop = zloop_new(); assert(loop); zloop_set_verbose(loop, 0); // push data every 10 ms rc = zloop_timer(loop, 1, 0, timer_event, pusher); assert(rc != -1); zmq_pollitem_t item; item.socket = puller; item.events = ZMQ_POLLIN; rc = zloop_poller(loop, &item, forward, publisher); assert(rc == 0); rc = zloop_start(loop); printf("zloop return: %d", rc); zloop_destroy(&loop); assert(loop == NULL); return 0; }
static zsock_t* subscriber_pull_socket_new(zconfig_t* config) { zsock_t *socket = zsock_new(ZMQ_PULL); assert(socket); zsock_set_linger(socket, 0); zsock_set_reconnect_ivl(socket, 100); // 100 ms zsock_set_reconnect_ivl_max(socket, 10 * 1000); // 10 s char *pull_spec = zconfig_resolve(config, "frontend/endpoints/subscriber/pull", "tcp://*"); char *full_spec = augment_zmq_connection_spec(pull_spec, pull_port); if (!quiet) printf("[I] subscriber: binding PULL socket to %s\n", full_spec); int rc = zsock_bind(socket, "%s", full_spec); assert(rc != -1); free(full_spec); const char *inproc_binding = "inproc://subscriber-pull"; if (!quiet) printf("[I] subscriber: binding PULL socket to %s\n", inproc_binding); rc = zsock_bind(socket, "%s", inproc_binding); assert(rc != -1); return socket; }
static zsock_t* subscriber_router_socket_new(zconfig_t* config) { zsock_t *socket = zsock_new(ZMQ_ROUTER); assert(socket); zsock_set_linger(socket, 0); zsock_set_reconnect_ivl(socket, 100); // 100 ms zsock_set_reconnect_ivl_max(socket, 10 * 1000); // 10 s char *router_spec = zconfig_resolve(config, "frontend/endpoints/subscriber/router", "tcp://*"); char *full_spec = augment_zmq_connection_spec(router_spec, router_port); if (!quiet) printf("[I] subscriber: binding ROUTER socket to %s\n", full_spec); int rc = zsock_bind(socket, "%s", full_spec); assert(rc != -1); free(full_spec); return socket; }
void maltcp_ctx_destroy_endpoint(void *self, void **endpoint_p) { assert(endpoint_p); if (*endpoint_p) { maltcp_endpoint_data_t *endpoint = *(maltcp_endpoint_data_t **) endpoint_p; *endpoint_p = NULL; clog_debug(maltcp_logger, "maltcp_ctx_destroy_endpoint(): %d ..\n", endpoint->socket); // NOTE: Closing this socket makes a core dump during maltcp_ctx_destroy !! zsock_set_linger(endpoint->socket, 0); // zsocket_destroy(endpoint->maltcp_ctx->zmq_ctx, endpoint->socket); // zmq_close(endpoint->socket); // ... destroy your own state here // mal_ctx and mal_endpoint must not be destroyed here // but where they have been created. free(endpoint); clog_debug(maltcp_logger, "maltcp_ctx_destroy_endpoint().\n"); } }
static zsock_t* subscriber_sub_socket_new(zconfig_t* config, zlist_t* devices) { zsock_t *socket = zsock_new(ZMQ_SUB); assert(socket); zsock_set_rcvhwm(socket, rcv_hwm); zsock_set_linger(socket, 0); zsock_set_reconnect_ivl(socket, 100); // 100 ms zsock_set_reconnect_ivl_max(socket, 10 * 1000); // 10 s // connect socket to endpoints char* spec = zlist_first(devices); while (spec) { if (!quiet) printf("[I] subscriber: connecting SUB socket to: %s\n", spec); int rc = zsock_connect(socket, "%s", spec); log_zmq_error(rc, __FILE__, __LINE__); assert(rc == 0); spec = zlist_next(devices); } return socket; }
/// // Set socket option `linger`. void QZsock::setLinger (int linger) { zsock_set_linger (self, linger); }
JNIEXPORT void JNICALL Java_org_zeromq_czmq_Zsock__1_1setLinger (JNIEnv *env, jclass c, jlong self, jint linger) { zsock_set_linger ((zsock_t *) (intptr_t) self, (int) linger); }