@@ -8,18 +8,30 @@ int main(int argc, char* argv[]) {
8
8
try {
9
9
zmq::context_t ctx (1 );
10
10
zmq::socket_t s1 (ctx,ZMQ_ROUTER);
11
- s1.bind (" tcp://*:5555" );
11
+ // s1.connect ("tcp://localhost:5555");
12
+ s1.bind (" tcp://*:5556" );
12
13
std::string s_crt (" server.crt" );
13
14
std::string s_key (" server.key" );
14
15
std::map<std::string, TLSZmq*> conns;
15
16
16
17
while (true ) {
17
18
// Wait for a message
18
19
zmq::message_t identifier (0 );
20
+ zmq::message_t request (0 );
21
+ std::string ident;
22
+ size_t size;
23
+
24
+ // Ignore seperator & intermediate ID stack
25
+ do {
26
+ s1.recv (&request);
27
+ size = request.size ();
28
+ if (size > 0 ) {
29
+ ident.assign (static_cast <char *>(request.data ()), request.size ());
30
+ }
31
+ s1.send (request, ZMQ_SNDMORE);
32
+ } while (size > 0 );
19
33
20
34
// Retrieve or create the TLSZmq handler for this client
21
- s1.recv (&identifier);
22
- std::string ident (static_cast <char *>(identifier.data ()), identifier.size ());
23
35
TLSZmq *tls;
24
36
if (conns.find (ident) == conns.end ()) {
25
37
tls = new TLSZmq (s_crt.c_str (), s_key.c_str ());
@@ -28,10 +40,6 @@ int main(int argc, char* argv[]) {
28
40
tls = conns[ident];
29
41
}
30
42
31
- // Ignore seperator
32
- zmq::message_t request (0 );
33
- s1.recv (&request);
34
-
35
43
// Push message on to TLS and update
36
44
s1.recv (&request);
37
45
tls->put_data (&request);
@@ -51,9 +59,6 @@ int main(int argc, char* argv[]) {
51
59
// If we need to send to the network, do so
52
60
if (tls->needs_write ()) {
53
61
zmq::message_t *data = tls->get_data ();
54
- s1.send (identifier, ZMQ_SNDMORE);
55
- request.rebuild (0 ); // reuse request as delimiter
56
- s1.send (request, ZMQ_SNDMORE);
57
62
s1.send (*data);
58
63
}
59
64
}
0 commit comments