/* From the documentation. */ #include #include #include #include #include #define S(x) #x #define S_(x) S(x) #define LINE S_(__LINE__) #define req(x) do { if (!(x)) { perror(__FILE__ ":" LINE ": " #x); abort(); } } while (0) int main() { void *context = zmq_ctx_new(); /* XXX doesn’t exist in 2.2, use zmq_init(io_threads)? */ req(context); void *responder = zmq_socket(context, ZMQ_REP); req(responder); req(0 == zmq_bind(responder, "tcp://*:5555")); for (;;) { zmq_msg_t request; zmq_msg_init(&request); req(0 <= zmq_msg_recv(&request, responder, 0)); /* doesn’t exist in 2.2 */ /* zmq_recv(responder, &request, 0); */ printf("Received hello\n"); req(0 == zmq_msg_close(&request)); sleep(5); zmq_msg_t reply; req(0 == zmq_msg_init_size(&reply, 5)); memcpy(zmq_msg_data(&reply), "World", 5); /* Doesn’t exist in 2.2: */ req(0 <= zmq_msg_send(&reply, responder, 0)); /* note that this function changed to take a void* and size_t after 2.2: */ /* zmq_send(responder, &reply, 0); */ req(0 == zmq_msg_close(&reply)); } req(0 == zmq_close(responder)); req(0 == zmq_ctx_destroy(context)); /* doesn’t exist in 2.2 */ /* zmq_term(context); */ return 0; }