i am using zactor and in the call back i receive a pipe socket. i create a router socket and polling this sockets for messages. it is not working and giving -1 result as return value of zmq_poll; what could be the problem?
`void
echo_actor (zsock_t *pipe, void *args)
{
// need to implement...?
printf("thread id : %lu", GetCurrentThreadId());
server_t* self = server_new(pipe);
zmq_pollitem_t items[] =
{
{ self->pipe, 0, ZMQ_POLLIN, 0 },
{ self->router, 0, ZMQ_POLLIN, 0 }
};
self->monitor_at = zclock_time() + self->monitor;
while (!self->stopped && !zctx_interrupted)
{
// Calculate tickless timer, up to interval seconds
uint64_t tickless = zclock_time() + self->monitor;
uint64_t diff = (tickless - zclock_time()) * ZMQ_POLL_MSEC;
// Poll until at most next timer event
int rc = zmq_poll(items, 2, diff );
if (rc == -1)
{
break; // Context has been shut down
}
// Process incoming message from either socket
if (items[0].revents & ZMQ_POLLIN)
server_control_message(self);
if (items[1].revents & ZMQ_POLLIN)
server_client_message(self);
// If clock went past timeout, then monitor server
if (zclock_time() >= self->monitor_at)
{
printf("clock went past timeout, need to monitor the server");
}
}
server_destroy(&self);
}`
int main()
{
zactor_t *actor = zactor_new (echo_actor, "Hello, World");
assert (actor);
zstr_sendx (actor, "ECHO", "This is a string", NULL);
char *string = zstr_recv (actor);
fprintf(stdout,"%s\n",string);
assert (streq (string, "This is a string"));
free (string);
zactor_destroy (&actor);
}
pipe socket and router socket shall work with poll option, do not know how it is going wrong