public void NativeSocket() { using (var context = NetMQContext.Create()) using (var streamServer = context.CreateStreamSocket()) using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { int port = streamServer.BindRandomPort("tcp://*"); socket.Connect("127.0.0.1", port); var buffer = new byte[] { 1 }; socket.Send(buffer); byte[] identity = streamServer.Receive(); byte[] message = streamServer.Receive(); Assert.AreEqual(buffer[0], message[0]); var socketSignal = new ManualResetEvent(false); var poller = new Poller { PollTimeout = TestPollTimeoutMillis }; poller.AddPollInSocket(socket, s => { socket.Receive(buffer); socketSignal.Set(); // removing the socket poller.RemovePollInSocket(socket); }); poller.PollTillCancelledNonBlocking(); // no message is waiting for the socket so it should fail Assert.IsFalse(socketSignal.WaitOne(100)); // sending a message back to the socket streamServer.SendMore(identity).Send("a"); Assert.IsTrue(socketSignal.WaitOne(100)); socketSignal.Reset(); // sending a message back to the socket streamServer.SendMore(identity).Send("a"); // we remove the native socket so it should fail Assert.IsFalse(socketSignal.WaitOne(100)); poller.CancelAndJoin(); } }