11 zio::multipart_t& mmsg)
14 if (ZMQ_SERVER == stype) {
17 if(ZMQ_ROUTER == stype) {
20 throw std::runtime_error(
"recv requires SERVER or ROUTER socket");
25 zio::multipart_t& mmsg)
28 auto res = server_socket.recv(msg, zio::recv_flags::none);
29 uint32_t routing_id = msg.routing_id();
31 rid.push_back((0xff000000&routing_id) >> 24);
32 rid.push_back((0x00ff0000&routing_id) >> 16);
33 rid.push_back((0x0000ff00&routing_id) >> 8);
34 rid.push_back((0x000000ff&routing_id));
37 mmsg.decode_append(msg);
48 zio::multipart_t& mmsg)
50 mmsg.recv(router_socket);
61 if (ZMQ_SERVER == stype) {
64 if(ZMQ_ROUTER == stype) {
67 throw std::runtime_error(
"send requires SERVER or ROUTER socket");
75 0xff000000&(rid[0] << 24) |
76 0x00ff0000&(rid[1] << 16) |
77 0x0000ff00&(rid[2] << 8) |
79 msg.set_routing_id(routing_id);
86 server_socket.
send(msg, zio::send_flags::none);
92 mmsg.pushmem(NULL, 0);
94 mmsg.send(router_socket);
99 zio::multipart_t& mmsg)
102 if (ZMQ_CLIENT == stype) {
106 if(ZMQ_DEALER == stype) {
110 throw std::runtime_error(
"recv requires CLIENT or DEALER socket");
114 zio::multipart_t& mmsg)
117 auto res = client_socket.recv(msg, zio::recv_flags::none);
118 mmsg.decode_append(msg);
130 zio::multipart_t& mmsg)
132 mmsg.recv(dealer_socket);
139 zio::multipart_t& mmsg)
142 if (ZMQ_CLIENT == stype) {
146 if(ZMQ_DEALER == stype) {
150 throw std::runtime_error(
"send requires CLIENT or DEALER socket");
154 zio::multipart_t& mmsg)
163 client_socket.
send(msg, zio::send_flags::none);
167 zio::multipart_t& mmsg)
169 mmsg.pushmem(NULL,0);
170 mmsg.send(dealer_socket);
185 std::this_thread::sleep_for(zzz);
188 static int s_interrupted = 0;
190 void s_signal_handler (
int signal_value)
196 return s_interrupted==1;
202 struct sigaction action;
203 action.sa_handler = s_signal_handler;
205 sigemptyset (&action.sa_mask);
206 sigaction (SIGINT, &action, NULL);
207 sigaction (SIGTERM, &action, NULL);
void send_serverish(socket_t &socket, multipart_t &mmsg, remote_identity_t rid)
void sleep_ms(std::chrono::milliseconds zzz)
void send_router(socket_t &router_socket, multipart_t &mmsg, remote_identity_t rid)
void send_client(socket_t &client_socket, multipart_t &mmsg)
size_t send(const void *buf_, size_t len_, int flags_=0)
void send_server(socket_t &server_socket, multipart_t &mmsg, remote_identity_t rid)
remote_identity_t recv_router(socket_t &router_socket, multipart_t &mmsg)
std::chrono::milliseconds now_ms()
remote_identity_t recv_serverish(socket_t &socket, multipart_t &mmsg)
void getsockopt(int option_, void *optval_, size_t *optvallen_) const
void send_dealer(socket_t &dealer_socket, multipart_t &mmsg)
void recv_client(socket_t &client_socket, multipart_t &mmsg)
std::chrono::microseconds now_us()
void recv_dealer(socket_t &dealer_socket, multipart_t &mmsg)
void send_clientish(socket_t &socket, multipart_t &mmsg)
void recv_clientish(socket_t &socket, multipart_t &mmsg)
remote_identity_t recv_server(socket_t &server_socket, multipart_t &mmsg)
std::string remote_identity_t
implementation of ZIO data flow protocol endpoints