<div dir="ltr"><div><div>Hi<br></div>I am using zeromq 3.2.2 on linux ubuntu 12.04.<br><br></div>I am confused about the behavior of zmq_poll when getting a ctrl-c.<br><br>The guide says:<br>If your code is blocking in <tt><a href="http://api.zeromq.org/3-2:zmq_msg_recv">zmq_msg_recv()</a></tt>, <tt><a href="http://api.zeromq.org/3-2:zmq_poll">zmq_poll()</a></tt>, or <tt><a href="http://api.zeromq.org/3-2:zmq_msg_send">zmq_msg_send()</a></tt>, when a signal arrives, the call will return with <tt>EINTR</tt>.<br>
<div><div><br></div><div>EINTR is defined as 4 , but when I interrupt the zmq_poll , I get -1 as return value.<br><br></div><div>Am I missing something ? <br><br></div><div>The code is below. I get :<br><br>start poll <br>
^Cfinished poll with -1 <br>start poll <br>^Cfinished poll with -1 <br><br></div><div>each time I press CTRL-C. I am not sending anything to this socket during this test.<br><br></div><div>Thanks for your thoughts.<br></div>
<div>mycircuit<br></div><div>++++++++++++++++++++++++++++++++++++++++++++++++++++++++<br>#include "czmq.h"<br><br>static int s_interrupted = 0;<br>static void s_signal_handler (int signal_value)<br>{<br>    (void) signal_value;<br>
    s_interrupted = 1;<br>    printf("handle interrupt \n");<br>}<br><br>static void s_catch_signals (void)<br>{<br>    struct sigaction action;<br>    action.sa_handler = s_signal_handler;<br>    action.sa_flags = 0;<br>
    sigemptyset (&action.sa_mask);<br>    sigaction (SIGINT, &action, NULL);<br>    sigaction (SIGTERM, &action, NULL);<br>}<br><br>int main (void)<br>{<br>    char *interf = "*";<br>    int service = 5562;<br>
    s_catch_signals();<br>    zctx_t *ctx = zctx_new ();<br>    assert (ctx);<br>    void *rep_skt = zsocket_new (ctx, ZMQ_REP);<br>    assert (rep_skt);<br>    int rc = zsocket_bind (rep_skt, "tcp://%s:%d", interf, service);<br>
    assert (rc == service);<br><br>    zmq_pollitem_t items [] = {<br>        { rep_skt, 0, ZMQ_POLLIN, 0 }<br>    };<br>    while (!s_interrupted) {<br>        printf("start poll \n");<br>        int rc = zmq_poll(items, 1, -1);<br>
        printf("finished poll with %d \n", rc);<br>        sleep(0.1);<br>    }<br>    zsocket_destroy (ctx, rep_skt);<br>    zctx_destroy (&ctx);<br>    return 0;<br>}<br><br></div></div></div>