예제 #1
0
        public async Task CanObtainAcceptedRemoteEndpointUsingTasks()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                IPEndPoint    endpoint;
                SocketFactory factory = new SocketFactory(worker);

                using (TcpSocket server = factory.Tcp())
                    using (TcpSocket client = factory.Tcp())
                    {
                        worker.Start();
                        client.Bind();

                        server.Bind(IPAddress.Loopback);
                        server.Listen(1);

                        endpoint = server.Info().Endpoint;

                        Task <TcpSocketAccept> accepting = server.Accept();
                        await client.Connect(endpoint);

                        TcpSocketAccept accepted = await accepting;
                        IPEndPoint      remote   = accepted.GetRemote();

                        Assert.That(remote.Address, Is.EqualTo(endpoint.Address));
                        Assert.That(remote.Port, Is.Not.EqualTo(endpoint.Port));
                        Assert.That(remote.Port, Is.Not.Zero);
                    }
            }
        }
예제 #2
0
        public static TcpSocketInfo BindAndInfo(this TcpSocket socket, int port)
        {
            if (socket.Bind(port) == false)
            {
                return(null);
            }

            return(socket.Info());
        }
예제 #3
0
        public static bool Bind(this TcpSocket socket, out int?port)
        {
            TcpSocketInfo info;

            if (socket.Bind() == false)
            {
                port = null;
                return(false);
            }

            info = socket.Info();
            port = info.Endpoint.Port;

            return(true);
        }
예제 #4
0
 public static TcpSocketInfo BindAndInfo(this TcpSocket socket)
 {
     socket.Bind();
     return(socket.Info());
 }