public void ImplicitCastTest1()
        {
            MutableIPEndPoint epToCast = new MutableIPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
            IPEndPointStruct  casted1  = (IPEndPointStruct)epToCast;
            IPEndPoint        casted2  = epToCast;

            Assert.AreEqual(new IPHolder(epToCast.Address), casted1.ip);
            Assert.AreEqual(epToCast.Address, casted2.Address);
            Assert.AreEqual(epToCast.Port, casted1.port);
            Assert.AreEqual(epToCast.Port, casted2.Port);
        }
Esempio n. 2
0
        public void Execute()
        {
            // Prepare
            Random r = new Random(0);

            byte[] toSend  = new byte[128];
            byte[] receive = new byte[128];
            for (int i = 0; i < toSend.Length; i++)
            {
                toSend[i] = (byte)r.Next();
            }



            // Senders
            Socket sender4 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            Socket sender6 = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);

            sender4.Bind(new IPEndPoint(IPAddress.Any, 0));
            sender6.Bind(new IPEndPoint(IPAddress.IPv6Any, 0));

            // Receivers
            Socket receiver4 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            Socket receiver6 = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);

            receiver4.Bind(new IPEndPoint(IPAddress.Any, 0));
            receiver6.Bind(new IPEndPoint(IPAddress.IPv6Any, 0));


            // Send
            IPEndPointStruct sendTarget4 = new IPEndPointStruct(new IPHolder(IPAddress.Loopback), (ushort)((IPEndPoint)receiver4.LocalEndPoint).Port);

            SocketHandler.SendTo(sender4, toSend, 0, toSend.Length, SocketFlags.None, ref sendTarget4);

            IPEndPointStruct sendTarget6 = new IPEndPointStruct(new IPHolder(IPAddress.IPv6Loopback), (ushort)((IPEndPoint)receiver6.LocalEndPoint).Port);

            SocketHandler.SendTo(sender6, toSend, 0, toSend.Length, SocketFlags.None, ref sendTarget6);


            // Receive
            IPEndPointStruct from4 = new IPEndPointStruct(new IPHolder(AddressFamily.InterNetwork), 0);
            int recv4 = SocketHandler.ReceiveFrom(receiver4, receive, 0, receive.Length, SocketFlags.None, ref from4);

            Assert.AreEqual(toSend.Length, recv4);
            CollectionAssert.AreEqual(toSend, receive);


            IPEndPointStruct from6 = new IPEndPointStruct(new IPHolder(AddressFamily.InterNetworkV6), 0);
            int recv6 = SocketHandler.ReceiveFrom(receiver6, receive, 0, receive.Length, SocketFlags.None, ref from6);

            Assert.AreEqual(toSend.Length, recv6);
            CollectionAssert.AreEqual(toSend, receive);
        }
        public void ImplicitCastTest2()
        {
            EndPoint         epToCast1 = new MutableIPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
            IPEndPointStruct casted1   = epToCast1;
            EndPoint         epToCast2 = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
            IPEndPointStruct casted2   = epToCast2;

            Assert.AreEqual(casted1, casted2);
            Assert.AreEqual(casted1.ip, new IPHolder(((MutableIPEndPoint)epToCast1).Address));
            Assert.AreEqual(casted2.ip, new IPHolder(((IPEndPoint)epToCast2).Address));
            Assert.AreEqual(casted1.port, ((MutableIPEndPoint)epToCast1).Port);
            Assert.AreEqual(casted2.port, ((IPEndPoint)epToCast2).Port);
        }
        public void PassHandle()
        {
            PosixResult result;

            // server socket
            var serverSocket  = Socket.Create(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp, blocking: true);
            var serverAddress = new IPEndPointStruct(IPAddress.Loopback, 0);

            serverSocket.Bind(serverAddress);
            serverAddress = serverSocket.GetLocalIPAddress();
            serverSocket.Listen(10);

            // client connect
            var clientSocket = Socket.Create(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp, blocking: true);

            clientSocket.TryConnect(serverAddress);

            // accept and pass socket
            SocketPair pair = Socket.CreatePair(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified, blocking: false);

            result = serverSocket.TryAcceptAndSendHandleTo(pair.Socket1);
            Assert.True(result.IsSuccess);

            // receive accept socket
            int acceptSocketFd;

            result = SocketInterop.ReceiveSocket(pair.Socket2, out acceptSocketFd, blocking: true);
            Socket acceptSocket = result.IsSuccess ? new Socket(acceptSocketFd) : null;

            Assert.True(result.IsSuccess);
            Assert.Equal(1, result.Value);

            // Send
            result = clientSocket.TrySend(s_data);

            // Receive
            byte[] receiveBuffer = new byte[10];
            result = acceptSocket.TryReceive(new ArraySegment <byte>(receiveBuffer));
            Assert.True(result.IsSuccess);
            Assert.Equal(s_data.Count, result.Value);

            // Close
            pair.Dispose();
            serverSocket.Dispose();
            clientSocket.Dispose();
            acceptSocket.Dispose();
        }
        public void Tcp()
        {
            PosixResult result;

            // Create server socket
            var serverSocket = Socket.Create(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp, blocking: true);

            // Bind
            var serverAddress = new IPEndPointStruct(IPAddress.Loopback, 0);

            result = serverSocket.TryBind(serverAddress);
            Assert.True(result.IsSuccess);
            result = serverSocket.TryGetLocalIPAddress(out serverAddress);
            Assert.True(result.IsSuccess);

            // Listen
            result = serverSocket.TryListen(10);
            Assert.True(result.IsSuccess);

            // Create client socket
            var clientSocket = Socket.Create(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp, blocking: true);

            // Connect
            result = clientSocket.TryConnect(serverAddress);
            Assert.True(result.IsSuccess);

            // Accept client socket
            Socket acceptedSocket;

            result = serverSocket.TryAccept(out acceptedSocket, blocking: true);

            // Send
            result = acceptedSocket.TrySend(s_data);

            // Receive
            byte[] receiveBuffer = new byte[10];
            result = clientSocket.TryReceive(new ArraySegment <byte>(receiveBuffer));
            Assert.True(result.IsSuccess);
            Assert.Equal(s_data.Count, result.Value);

            // Close
            acceptedSocket.Dispose();
            serverSocket.Dispose();
            clientSocket.Dispose();
        }
        internal static void CreateConnectedSockets(out Socket socket1, out Socket socket2, bool blocking, bool ipv4 = true)
        {
            var serverSocket  = Socket.Create(ipv4 ? AddressFamily.InterNetwork : AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp, blocking: true);
            var serverAddress = new IPEndPointStruct(ipv4 ? IPAddress.Loopback : IPAddress.IPv6Loopback, 0);

            serverSocket.Bind(serverAddress);
            serverAddress = serverSocket.GetLocalIPAddress();
            serverSocket.Listen(10);

            var clientSocket = Socket.Create(ipv4 ? AddressFamily.InterNetwork : AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp, blocking);

            clientSocket.TryConnect(serverAddress);

            Socket acceptedSocket;

            acceptedSocket = serverSocket.Accept(blocking);

            serverSocket.Dispose();
            socket1 = clientSocket;
            socket2 = acceptedSocket;
        }
        public void ReuseLocalAddress()
        {
            PosixResult result;

            // Create server socket
            var serverSocket = Socket.Create(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp, blocking: true);

            // Bind
            var serverAddress = new IPEndPointStruct(IPAddress.Loopback, 0);

            result = serverSocket.TryBind(serverAddress);
            Assert.True(result.IsSuccess);

            // Get address
            result = serverSocket.TryGetLocalIPAddress(out serverAddress);
            Assert.True(result.IsSuccess);

            // Get address (no reuse)
            IPEndPointStruct serverAddress2;
            var reuseAddress = IPAddress.None;

            result = serverSocket.TryGetLocalIPAddress(out serverAddress2, reuseAddress);
            Assert.True(result.IsSuccess);
            Assert.Equal(serverAddress.Address, serverAddress2.Address);
            Assert.NotEqual(serverAddress.Address, reuseAddress);
            Assert.False(object.ReferenceEquals(serverAddress.Address, serverAddress2.Address));

            // Get address (reuse)
            IPEndPointStruct serverAddress3;

            result = serverSocket.TryGetLocalIPAddress(out serverAddress3, reuseAddress: serverAddress2.Address);
            Assert.True(result.IsSuccess);
            Assert.True(object.ReferenceEquals(serverAddress2.Address, serverAddress3.Address));

            // Close
            serverSocket.Dispose();
        }
Esempio n. 8
0
 public STUNAttr_MappedAddress(IPEndPointStruct endPoint)
 {
     this = new STUNAttr_MappedAddress(endPoint.ip, endPoint.port);
 }