【发布时间】:2019-11-27 19:30:52
【问题描述】:
我想知道如何在 czmq 库中设置 zstr_send() 和 zstr_recv() 的超时时间。
我知道这可以在libzmq 中使用zmq_setsockopt (requester, ZMQ_RCVTIMEO, &timeout, sizeof(timeout)) 来完成,但在czmq 中则不行
libczmq 的语法是什么?!
【问题讨论】:
我想知道如何在 czmq 库中设置 zstr_send() 和 zstr_recv() 的超时时间。
我知道这可以在libzmq 中使用zmq_setsockopt (requester, ZMQ_RCVTIMEO, &timeout, sizeof(timeout)) 来完成,但在czmq 中则不行
libczmq 的语法是什么?!
【问题讨论】:
是的!找到它...
zsock_set_rcvtimeo() 和zsock_set_sndtimeo() 是设置超时的答案。
czmq 的 API 没有好的文档! :|
zsock_option() 中有很多没有文档的 API。
【讨论】:
您可以使用选择:
int64_t start;
struct timeval tv;
fd_set fds;
int fd,rc;
tv.tv_sec = 1; // timeout in seconds
tv.tv_usec = 0;
FD_ZERO(&fds);
FD_SET(fd, &fds);
start = zclock_time ();
zstr_send (client, "hello");
rc = select(fd + 1, &fds, (fd_set *)0, (fd_set *)0, &tv);
if (rc == 0) {
// timeoout expired
}
if (rc == -1) {
// erreur select
}
// message recieved before timeout
printf (" message recieved s/second\n", (1000 * 10000) / (int) (zclock_time () - start));
【讨论】:
select() 不是那个,而且很乱