public void TestBuffer()
        {
            // Default buffer values.
            var awaitable = new SocketAwaitable();
            Assert.IsNotNull(awaitable.Buffer.Array);
            Assert.AreEqual(awaitable.Buffer.Array.Length, 0);
            Assert.AreEqual(awaitable.Buffer.Offset, 0);
            Assert.AreEqual(awaitable.Buffer.Count, 0);

            // Default transferred values.
            Assert.IsNotNull(awaitable.Transferred.Array);
            Assert.AreEqual(awaitable.Transferred.Array.Length, 0);
            Assert.AreEqual(awaitable.Transferred.Offset, 0);
            Assert.AreEqual(awaitable.Transferred.Count, 0);

            // Assign a null buffer.
            var nullBuffer = default(ArraySegment<byte>);
            Assert.IsNull(nullBuffer.Array);

            awaitable.Buffer = nullBuffer;
            Assert.IsNotNull(awaitable.Buffer.Array);
            Assert.AreEqual(awaitable.Buffer.Array.Length, 0);
            Assert.AreEqual(awaitable.Buffer.Offset, 0);
            Assert.AreEqual(awaitable.Buffer.Count, 0);
            
            // Assign a valid buffer.
            var data = new byte[32];
            var buffer = new ArraySegment<byte>(data, 8, 16);

            awaitable.Buffer = buffer;
            Assert.AreSame(awaitable.Buffer.Array, data);
            Assert.AreEqual(awaitable.Buffer.Offset, buffer.Offset);
            Assert.AreEqual(awaitable.Buffer.Count, buffer.Count);

            // Clear awaitable.
            awaitable.Clear();
            Assert.IsNotNull(awaitable.Buffer.Array);
            Assert.AreEqual(awaitable.Buffer.Array.Length, 0);
            Assert.AreEqual(awaitable.Buffer.Offset, 0);
            Assert.AreEqual(awaitable.Buffer.Count, 0);
        }
        public void TestRemoteEndPoint()
        {
            // Default value.
            var awaitable = new SocketAwaitable();
            Assert.IsNull(awaitable.RemoteEndPoint);

            // Assign value.
            var endPoint = new IPEndPoint(IPAddress.Loopback, IPEndPoint.MaxPort);
            awaitable.RemoteEndPoint = endPoint;
            Assert.AreSame(awaitable.RemoteEndPoint, endPoint);

            // Clear awaitable.
            awaitable.Clear();
            Assert.IsNull(awaitable.RemoteEndPoint);
        }
        public void TestSocketFlags()
        {
            // Default value.
            var awaitable = new SocketAwaitable();
            Assert.AreEqual(awaitable.SocketFlags, SocketFlags.None);

            // Assign value.
            awaitable.SocketFlags = SocketFlags.Broadcast;
            Assert.AreEqual(awaitable.SocketFlags, SocketFlags.Broadcast);

            // Clear awaitable.
            awaitable.Clear();
            Assert.AreEqual(awaitable.SocketFlags, SocketFlags.None);
        }