[zeromq-dev] segmentation fault with czmq
Arnaud Loonstra
arnaud at sphaero.org
Fri Sep 27 11:54:34 CEST 2019
What platform are you on and what versions of the libs are you using?
On 27-09-2019 01:22, Shishir Pandey wrote:
> Hi
>
> I was trying to run the lpclient.c (lazie pirate, chapter 4,
> http://zguide.zeromq.org/page:all#Client-Side-Reliability-Lazy-Pirate-Pattern)
> program from the guide. The program uses the old czmq API and does
> not work. I was trying to run with the latest czmq library and change
> the program to the following program :
>
> #include<czmq.h>
>
> #defineREQUEST_TIMEOUT2500// msecs, (>1000!)
>
> #defineREQUEST_RETRIES3// Before we abandon
>
> #defineSERVER_ENDPOINT"tcp://localhost:5555"
>
> intmain()
>
> {
>
> zsock_t *client = zsock_new_req(SERVER_ENDPOINT);
>
> printf("I: Connecting to server...\n");
>
> assert(client);
>
> int sequence = 0;
>
> int retries_left = REQUEST_RETRIES;
>
> printf("Entering while loop...\n");
>
> while(retries_left) // interrupt needs to be handled
>
> {
>
> // We send a request, then we get a reply
>
> charrequest[10];
>
> sprintf(request, "%d", ++sequence);
>
> zstr_send(client, request);
>
> int expect_reply = 1;
>
> while(expect_reply)
>
> {
>
> printf("Expecting reply....\n");
>
> zmq_pollitem_t items [] = {{client, 0, ZMQ_POLLIN, 0}};
>
> printf("After polling\n");
>
> int rc = zmq_poll(items, 1, REQUEST_TIMEOUT * ZMQ_POLL_MSEC);
>
> printf("Polling Done.. \n");
>
> if (rc == -1)
>
> break; // Interrupted
>
> // Here we process a server reply and exit our loop if the
>
> // reply is valid. If we didn't get a reply we close the
>
> // client socket, open it again and resend the request. We
>
> // try a number times before finally abandoning:
>
> if (items[0].revents & ZMQ_POLLIN)
>
> {
>
> // We got a reply from the server, must match sequence
>
> char *reply = zstr_recv(client);
>
> if(!reply)
>
> break; // interrupted
>
> if (atoi(reply) == sequence)
>
> {
>
> printf("I: server replied OK (%s)\n", reply);
>
> retries_left=REQUEST_RETRIES;
>
> expect_reply = 0;
>
> }
>
> else
>
> {
>
> printf("E: malformed reply from server: %s\n", reply);
>
> }
>
> free(reply);
>
> }
>
> else
>
> {
>
> if(--retries_left == 0)
>
> {
>
> printf("E: Server seems to be offline, abandoning\n");
>
> break;
>
> }
>
> else
>
> {
>
> printf("W: no response from server, retrying...\n");
>
> zsock_destroy(&client);
>
> printf("I: reconnecting to server...\n");
>
> client = zsock_new_req(SERVER_ENDPOINT);
>
> zstr_send(client, request);
>
> }
>
> }
>
> }
>
> zsock_destroy(&client);
>
> return0;
>
> }
>
> }
>
> I get a segmentation fault on line – “ int rc = zmq_poll(item….” Wasn’t
> able to fix it, could some one help me with this?
>
> Thanks.
>
> --
>
> sp
>
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> https://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
More information about the zeromq-dev
mailing list