Я обмениваюсь сообщениями между двумя машинами, используя сокеты ZeroMQ, по схеме запрос-ответ. Этот обмен осуществляется с помощью программы C с некоторыми другими функциями.
В случае, когда отвечающая машина не работает, запрашивающая сторона ждет сообщения неопределенно долго, блокируя остальные функции программы. Это не то, что я хочу.
Я пробовал использовать:
zmq_recv (requester, buffer, 256, ZMQ_DONTWAIT);
но инициатор запроса сразу же возвращается, потому что в его очереди нет сообщения (очевидно).
Есть ли способ иметь в ZeroMQ неблокирующую схему запроса-ответа? Что-то вроде: «если сообщение не было получено в течение 1 секунды, вернуть».
while (1) { zmq_pollitem_t items [] = {{ requester, 0, ZMQ_POLLIN, 0 }}; zmq_poll (items, 1, 1); if (items[0].revents & ZMQ_POLLIN) { int size = zmq_recv (requester, buffer, 4, 0); } }
сообщение не получено, поэтому я разместил этот вопрос. 16.11.2019select()
является частью C API. выберите страницу MAN 17.11.2019