Последовательность запуска клиента сервера ZeroMQ - PullRequest
1 голос
/ 03 апреля 2019

Возникает проблема, если клиент запускается до сервера

Спецификации: Ubuntu 16.04 с C ++ 11, libzmq: 4.2.3

Проблема: примеры кодов

server.cpp

int main()
{
zmq::context_t context(1);
zmq::socket_t requester(context,ZMQ_ROUTER);
.
//code to get address
.    
requester.bind(address);

while(true)
{
zmq::message_t message;
requester.recv(&message);
.
//remaining code
.
}
return 0;
}

client.cpp

int main()
{
zmq::context_t context(1);
zmq::socket_t requester(context,ZMQ_DEALER);
.
//code to get address
.
requester.connect(address);
zmq::message_t message;
.
//populate the message to send
.

requester.send(message);
return 0;
}

Я знаю, что в zmq я могу запустить клиент, даже если сервер не работает, но мое клиентское приложение должно включать безопасностьпроверьте, для чего требуется запуск сервера. Есть ли какой-либо способ, которого я могу добиться, установив сбой подключения или какой-то другой обходной путь. Параметры тайм-аута не работают для меня

1 Ответ

0 голосов
/ 03 апреля 2019

Сделайте отправку неблокируемой, если там нет доступных серверов, отправка не удастся и установит errno

http://api.zeromq.org/4-2:zmq-send

ZMQ_DONTWAIT
For socket types (DEALER, PUSH) that block when there are no available peers 
(or all peers have full high-water mark), specifies that the operation should 
be performed in non-blocking mode. If the message cannot be queued on the 
socket, the zmq_send() function shall fail with errno set to EAGAIN.
...