Exemple #1
0
        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();
            }
        }