Quantcast
Channel: Active questions tagged zeromq - Stack Overflow
Viewing all articles
Browse latest Browse all 193

Cppzmq - Router to Router communication gets stuck on initial connect

$
0
0

I'm trying to recreate the Router-to-Router example from PyZMQ using cppzmq. I tested the Python version and the behavior is as expected (i.e., client connects to server, server sends reply).

However, my C++ version gets stuck on the initial connect (or throws a host unreachable error if router_mandatory is set).Changing the client socket type to dealer leads to the expected message flow.

I suspect that I messed up the identities/routing somehow, but I'm too stuck to see where I went wrong.

server.cpp

#include <zmq.hpp>#include <zmq_addon.hpp>#include <iostream>#include <vector>#include <string>int main() {    zmq::context_t context(1);    zmq::socket_t server(context, zmq::socket_type::router);    server.set(zmq::sockopt::routing_id, "server");    server.bind("tcp://*:4000");    while (true) {        std::cout << "Waiting for msg" << std::endl;         std::vector<zmq::message_t> recv_msgs;        zmq::recv_multipart(server, std::back_inserter(recv_msgs));        std::string received_message(static_cast<char*>(recv_msgs[1].data()), recv_msgs[1].size());        std::cout << "Received message: " << received_message << std::endl;        server.send(recv_msgs[0], zmq::send_flags::sndmore);        server.send(zmq::message_t(), zmq::send_flags::sndmore);        server.send(zmq::buffer("Response from server"), zmq::send_flags::none);    }    return 0;}

client.cpp

#include <zmq.hpp>#include <zmq_addon.hpp>#include <array>#include <iostream>#include <string>int main() {    zmq::context_t context(1);    zmq::socket_t client(context, zmq::socket_type::router);    client.set(zmq::sockopt::routing_id, "client");    client.connect("tcp://127.0.0.1:4000");    // Send a request to the server    std::array<zmq::const_buffer, 3> bufs = {      zmq::buffer("server"), // set identity of server we try to reach      zmq::str_buffer(""),      zmq::str_buffer("Hello, Server!")    };    zmq::send_multipart(client, bufs);    // Receive the response    zmq::message_t reply;    zmq::message_t identity;    client.recv(identity, zmq::recv_flags::none);    client.recv(reply, zmq::recv_flags::none);    std::string reply_message(static_cast<char*>(reply.data()), reply.size());    std::cout << "Received reply: " << reply_message << std::endl;    return 0;}
  • I read the guide
  • I checked for similar issues on github
  • I tried several variations of identities, buffers, multipart messages, and socket types (as a sanity check)

Viewing all articles
Browse latest Browse all 193

Trending Articles