public static async Task CanAcceptClientAsync()
        {
            var port = Utils.GetRandomClientPort();

            using var server = new FlareTcpServer();
            server.Start(port);
            var clientTask = Task.Run(() => {
                using var client = new FlareTcpClient();
                client.Connect(IPAddress.Loopback, port);
                client.Disconnect();
            });

            using var client = await server.AcceptClientAsync().ConfigureAwait(false);

            Assert.IsNotNull(client);
            server.Shutdown();
            await clientTask.ConfigureAwait(false);
        }
        public static void CanAcceptClient()
        {
            var port = Utils.GetRandomClientPort();

            using var server = new FlareTcpServer();
            server.Start(port);
            var clientTask = Task.Run(() => {
                using var client = new FlareTcpClient();
                client.Connect(IPAddress.Loopback, port);
                client.Disconnect();
            });

            using var client = server.AcceptClient();
            client.Disconnect();
            Assert.IsNotNull(client);
            server.Shutdown();
            Assert.IsTrue(clientTask.Wait(TimeSpan.FromSeconds(5)), "Client Task did not complete successfully.");
        }
        public static void FreesSocket()
        {
            var port = Utils.GetRandomClientPort();

            using var server = new FlareTcpServer();
            var clientTask = Task.Run(() => {
                using var client = new FlareTcpClient();
                client.Connect(IPAddress.Loopback, port);
                client.Disconnect();
            });

            server.Start(port);
            using var serverClient = server.AcceptClient();
            serverClient.Disconnect();
            server.Shutdown();
            Assert.IsTrue(clientTask.Wait(TimeSpan.FromSeconds(5)), "Client Task did not complete successfully.");
            Assert.IsFalse(Utils.IsPortInUse(port), "Port is still in use after server shutdown.");
        }
        public static void CanSendMessage()
        {
            var port = Utils.GetRandomClientPort();

            byte[] testMessage = Encoding.UTF8.GetBytes("Test");

            using var server = new FlareTcpServer();
            server.Start(port);
            var clientTask = Task.Run(() => {
                using var client = new FlareTcpClient();
                client.Connect(IPAddress.Loopback, port);
                using var message = client.ReadNextMessage();
                Assert.AreEqual(message.Span.ToArray(), testMessage);
                client.Disconnect();
            });

            using var client = server.AcceptClient();
            client.WriteMessage(testMessage);
            server.Shutdown();
            clientTask.Wait(TimeSpan.FromSeconds(5));
        }
        public static async Task CanSendMessageAsync()
        {
            var port = Utils.GetRandomClientPort();

            byte[] testMessage = Encoding.UTF8.GetBytes("Test");

            using var server = new FlareTcpServer();
            server.Start(port);
            var clientTask = Task.Run(() => {
                using var client = new FlareTcpClient();
                client.Connect(IPAddress.Loopback, port);
                using var message = client.ReadNextMessage();
                Assert.AreEqual(message.Span.ToArray(), testMessage);
                client.Disconnect();
            });

            using var client = await server.AcceptClientAsync().ConfigureAwait(false);

            await client.WriteMessageAsync(testMessage).ConfigureAwait(false);

            server.Shutdown();
            await clientTask.ConfigureAwait(false);
        }