Created
November 12, 2011 20:38
-
-
Save rjsmith/1361080 to your computer and use it in GitHub Desktop.
ZeroMQ 3.1 REQ/REP poll revents behaviour compared with 2.1.10
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public function testPollingReqRepZMQ3() { | |
| var pollinout:Int = ZMQ.ZMQ_POLLIN() | ZMQ.ZMQ_POLLOUT(); | |
| var ctx:ZContext; | |
| var req:ZMQSocket, rep:ZMQSocket; | |
| var poller:ZMQPoller; | |
| // ** Test tcp req/rep poller revents | |
| var randomPort:Int = Math.round(Math.random() * 18000) + 2000; | |
| ctx = new ZContext(); | |
| req = ctx.createSocket(ZMQ_REQ); | |
| rep = ctx.createSocket(ZMQ_REP); | |
| req.bind("tcp://*:"+randomPort); | |
| rep.connect("tcp://localhost:"+randomPort); | |
| Sys.sleep(0.1); // Allow sockets time to connect | |
| poller = new ZMQPoller(); | |
| poller.registerSocket(req, pollinout); | |
| poller.registerSocket(rep, pollinout); | |
| var numSocks = poller.poll(10 * ZMQ.ZMQ_POLL_MSEC()); | |
| trace ("tcp:"+numSocks); // Returns: | |
| // "2" in ZMQ 3.1 | |
| // "1" in ZMQ 2.1.0 | |
| ctx.destroy(); | |
| // ** Test ipc req/rep poller revents | |
| ctx = new ZContext(); | |
| req = ctx.createSocket(ZMQ_REQ); | |
| rep = ctx.createSocket(ZMQ_REP); | |
| req.bind("ipc://test.poller"); | |
| rep.connect("ipc://test.poller"); | |
| Sys.sleep(0.1); // Allow sockets time to connect | |
| poller = new ZMQPoller(); | |
| poller.registerSocket(req, pollinout); | |
| poller.registerSocket(rep, pollinout); | |
| var numSocks = poller.poll(10 * ZMQ.ZMQ_POLL_MSEC()); | |
| trace ("ipc:"+numSocks); // Returns: | |
| // "2" in ZMQ 3.1 | |
| // "1" in ZMQ 2.1.0 | |
| ctx.destroy(); | |
| // ** Test inproc req/rep poller revents | |
| ctx = new ZContext(); | |
| req = ctx.createSocket(ZMQ_REQ); | |
| rep = ctx.createSocket(ZMQ_REP); | |
| req.bind("inproc://test.poller"); | |
| rep.connect("inproc://test.poller"); | |
| Sys.sleep(0.1); // Allow sockets time to connect | |
| poller = new ZMQPoller(); | |
| poller.registerSocket(req, pollinout); | |
| poller.registerSocket(rep, pollinout); | |
| var numSocks = poller.poll(10 * ZMQ.ZMQ_POLL_MSEC()); | |
| trace ("inproc:"+numSocks); // Returns: | |
| // "1" in ZMQ 3.1 | |
| // "1" in ZMQ 2.1.0 | |
| ctx.destroy(); | |
| assertTrue(true); | |
| } |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is a snippet from with a Haxe.unit.TestCase class that demonstrates the different behaviour in ZMQ 3.1 between inproc and ipc/tcp transports when testing the results of a poller.poll() on a pair of REQ/REP sockets which have been connected but no messages passed between them. I found that: