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@lists.zeromq.org
https://lists.zeromq.org/mailman/listinfo/zeromq-dev

_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
https://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to