Hi Statis Thank you for your comment. I didn't consider CTRL-C as a failure , but after reading the api doc again, I understand that it is treated as such .
mycircuit On 15 February 2013 14:47, Stathis Gkotsis <stathis.gkot...@commsquare.com>wrote: > Hi,**** > > ** ** > > “Upon failure, zmq_poll() shall return -1 and set errno to one of the > values defined below”, so you should check errno.**** > > ** ** > > BR,**** > > Stathis**** > > ** ** > > *From:* zeromq-dev-boun...@lists.zeromq.org [mailto: > zeromq-dev-boun...@lists.zeromq.org] *On Behalf Of *mycircuit > *Sent:* Friday, February 15, 2013 2:05 PM > *To:* zeromq-dev@lists.zeromq.org > *Subject:* [zeromq-dev] zmq_poll return value and C-CTRL interrupts**** > > ** ** > > Hi**** > > I am using zeromq 3.2.2 on linux ubuntu 12.04.**** > > I am confused about the behavior of zmq_poll when getting a ctrl-c. > > The guide says: > If your code is blocking in > zmq_msg_recv()<http://api.zeromq.org/3-2:zmq_msg_recv>, > zmq_poll() <http://api.zeromq.org/3-2:zmq_poll>, or > zmq_msg_send()<http://api.zeromq.org/3-2:zmq_msg_send>, > when a signal arrives, the call will return with EINTR.**** > > ** ** > > EINTR is defined as 4 , but when I interrupt the zmq_poll , I get -1 as > return value.**** > > Am I missing something ? **** > > The code is below. I get : > > start poll > ^Cfinished poll with -1 > start poll > ^Cfinished poll with -1 **** > > each time I press CTRL-C. I am not sending anything to this socket during > this test.**** > > Thanks for your thoughts.**** > > mycircuit**** > > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > #include "czmq.h" > > static int s_interrupted = 0; > static void s_signal_handler (int signal_value) > { > (void) signal_value; > s_interrupted = 1; > printf("handle interrupt \n"); > } > > static void s_catch_signals (void) > { > struct sigaction action; > action.sa_handler = s_signal_handler; > action.sa_flags = 0; > sigemptyset (&action.sa_mask); > sigaction (SIGINT, &action, NULL); > sigaction (SIGTERM, &action, NULL); > } > > int main (void) > { > char *interf = "*"; > int service = 5562; > s_catch_signals(); > zctx_t *ctx = zctx_new (); > assert (ctx); > void *rep_skt = zsocket_new (ctx, ZMQ_REP); > assert (rep_skt); > int rc = zsocket_bind (rep_skt, "tcp://%s:%d", interf, service); > assert (rc == service); > > zmq_pollitem_t items [] = { > { rep_skt, 0, ZMQ_POLLIN, 0 } > }; > while (!s_interrupted) { > printf("start poll \n"); > int rc = zmq_poll(items, 1, -1); > printf("finished poll with %d \n", rc); > sleep(0.1); > } > zsocket_destroy (ctx, rep_skt); > zctx_destroy (&ctx); > return 0; > }**** > > _______________________________________________ > zeromq-dev mailing list > zeromq-dev@lists.zeromq.org > http://lists.zeromq.org/mailman/listinfo/zeromq-dev > >
_______________________________________________ zeromq-dev mailing list zeromq-dev@lists.zeromq.org http://lists.zeromq.org/mailman/listinfo/zeromq-dev