[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