Как прочитать возвращаемые значения ZeroMQ из методов .recv () и .send () в c ++? - PullRequest
1 голос
/ 23 марта 2020

Я пытаюсь написать класс c ++ для связи между двумя компьютерами через ZeroMQ.

Чтобы иметь возможность обрабатывать ошибки, я пытаюсь прочитать возвращаемые значения методов .recv()- и .send()- но я получаю следующую ошибку

error: cannot convert 'zmq::send_result_t' {aka 'zmq::detail::trivial_optional<unsigned int>'} to 'int' in assignment ret = msocket.send(reply, zmq::send_flags::none);

Код выглядит так:

Publisher::Publisher(dataHandler & mdatahandler) :datahandler(mdatahandler)
{
    // construct a REP (reply) socket and bind to interface

    socketState.bind("tcp://*:5555");
    //socketAngles.bind("tcp://*:5556");
    //socketCurrents.bind("tcp://*:5557");
}

Publisher::~Publisher()
{
    socketState.close();
    //socketAngles.close();
    //socketCurrents.close();
}

std::string Publisher::transfer(zmq::socket_t& msocket, std::string replyString,
    int receiveFlag = 0)
{
    zmq::send_result_t ret = 0;
    if (receiveFlag)
    {
        zmq::message_t receivedData;
        ret = msocket.recv(receivedData, zmq::recv_flags::none);
        if (verbose)
        {
            std::cout << "Received " << receivedData.to_string() << std::endl;
        }
        return receivedData.to_string();
    }
    zmq::message_t reply{ replyString.cbegin(), replyString.cend() };

    // send the reply to the client
    ret = msocket.send(reply, zmq::send_flags::none);

    if (ret == -1)
    {
        std::cout << zmq_strerror(errno) << std::endl;
    }
}

сокет определен как

zmq::context_t context{ 1 };
zmq::socket_t socketState{ context, ZMQ_REP };

Как я могу надежно отлавливать ошибки и есть ли лучший способ обработки ошибок, если они возникают?

Редактировать:
Я добавил zmq::send_result_t, но как я могу что-нибудь сделать с этим? Я не могу сравнить это ни с чем и не могу напечатать это тоже.

1 Ответ

0 голосов
/ 23 марта 2020

В случае, если кто-то никогда не работал с ZeroMQ,
здесь можно с первого взгляда посмотреть на "ZeroMQ Принципы менее чем за Пять секунд 1008 * "
, прежде чем углубляться в детали



Q : " Как я могу надежно ловить ошибки и есть ли лучший способ обработки ошибок , если они возникают? "

Добро пожаловать в практику искусства дзен- of-Zero.


Часть A "Как надежно отловить ошибки " :

Сначала понять языковые инструменты. Существуют инструменты, связанные с исключениями, лучшие практики и другие «что нужно» и «что нельзя». Повинуйтесь им

Часть B "a лучший способ обработки ошибок " :

Лучший способ обработки ошибок избегает их - это не спасет Pl anet (может прочитать о г-же Маргарет Хэмилтон (она спасла жизни и национальную гордость за то, что сделала это совершенно правильно для программного обеспечения Apollo Guidance Computer) и ее подлинная методология, которая спасает принципиально конфликтующие случаи, которых нельзя избежать)

Следующая, гораздо более слабая стратегия - это проектирование архитектур (затем кода), которые тщательно проверяют состояние системы (возвращаемые значения, RTT- время и другие факторы), чтобы быть постоянно готовым справиться с Исключением, как это происходит, и в полном контексте с состоянием системы (не удивляться тому, что вы стоите таким же неосведомленным, как слепой человек на середине перекрестка После того, как было сгенерировано исключение ... и оно будет сгенерировано, через некоторое время, так что будьте готовы априори, не паникуя экс-пост, прибегая к хаотике c ad-ho c опции)

Решение:

Шаг 1)
Понимание и освоение языковых инструментов.

Шаг 2)
Понимание и освоение инструментов ZeroMQ (Нет REP может когда-либо начинаться с .send())

Шаг 3)
Понимание и освоите опубликованный API ZeroMQ, есть все подробности, необходимые для успешной детализации обработки исключений (предупреждающие индикации состояний ошибок - скрытые камни в { EINVAL | ETERM | ENOTSOCK | EINTR | ... } состояниях ошибок, объясненные для каждого метода вызова API, в должном контексте для каждого один такой метод.

Если вы все еще не уверены, по крайней мере, прочитайте невероятную книгу Питера ХИНТЖЕНСА «Код подключен, том 1» , там каждый получит корни о том, что такое Zen-of-Zero.

...