[zeromq-dev] zmq_poll return value and C-CTRL interrupts
Stathis Gkotsis
stathis.gkotsis at commsquare.com
Fri Feb 15 14:47:31 CET 2013
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-bounces at lists.zeromq.org [mailto:zeromq-dev-bounces at lists.zeromq.org] On Behalf Of mycircuit
Sent: Friday, February 15, 2013 2:05 PM
To: zeromq-dev at 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;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20130215/a26596cc/attachment.htm>
More information about the zeromq-dev
mailing list