aboutsummaryrefslogtreecommitdiff
path: root/src/im-zmq.c
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2022-07-06 15:28:38 +0200
committerThomas White <taw@physics.org>2022-07-06 16:15:05 +0200
commit5e06310da1d04436a27354f3d305a520ce993c1d (patch)
tree6d2fc2d6e22b94a68c8bab5ad352063686997ee1 /src/im-zmq.c
parente1bee0847d0843ca028106dc8940df72e8690eb1 (diff)
indexamajig: Add timeout for ZMQ socket
Diffstat (limited to 'src/im-zmq.c')
-rw-r--r--src/im-zmq.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/im-zmq.c b/src/im-zmq.c
index b326e868..af70e7ae 100644
--- a/src/im-zmq.c
+++ b/src/im-zmq.c
@@ -53,6 +53,7 @@ struct im_zmq
void *socket;
zmq_msg_t msg;
const char *request_str;
+ int request_sent;
};
@@ -87,6 +88,11 @@ struct im_zmq *im_zmq_connect(struct im_zmq_params *params)
return NULL;
}
+ int timeout = 3000;
+ zmq_setsockopt(z->socket, ZMQ_RCVTIMEO, &timeout, sizeof(timeout));
+ int linger = 0;;
+ zmq_setsockopt(z->socket, ZMQ_LINGER, &linger, sizeof(linger));
+
if ( params->request == NULL ) {
int i;
@@ -114,6 +120,7 @@ struct im_zmq *im_zmq_connect(struct im_zmq_params *params)
/* REQ mode */
z->request_str = params->request;
+ z->request_sent = 0;
}
@@ -126,7 +133,7 @@ void *im_zmq_fetch(struct im_zmq *z, size_t *pdata_size)
int msg_size;
void *data_copy;
- if ( z->request_str != NULL ) {
+ if ( (z->request_str != NULL) && !z->request_sent ) {
/* Send the request */
if ( zmq_send(z->socket, z->request_str,
@@ -136,13 +143,17 @@ void *im_zmq_fetch(struct im_zmq *z, size_t *pdata_size)
zmq_strerror(errno));
return NULL;
}
+
+ z->request_sent = 1;
}
/* Receive message */
zmq_msg_init(&z->msg);
msg_size = zmq_msg_recv(&z->msg, z->socket, 0);
if ( msg_size == -1 ) {
- ERROR("ZMQ recieve failed: %s\n", zmq_strerror(errno));
+ if ( errno != EAGAIN ) {
+ ERROR("ZMQ recieve failed: %s\n", zmq_strerror(errno));
+ }
zmq_msg_close(&z->msg);
return NULL;
}