private static Func <Task> MakeNtpServer(UdpClient socket, ServerArguments arguments, TextWriter writer)
        {
            var delay = new TimeSpan(0, 0, 0, arguments.SecondsDelay);

            return(async() =>
            {
                while (true)
                {
                    try
                    {
                        var udpReceiveResult = await socket.ReceiveAsync();

                        writer.WriteLine($"{DateTime.Now}  Recieved request from {udpReceiveResult.RemoteEndPoint}.");

                        var frame = new SntpFrame(udpReceiveResult.Buffer);

                        frame.RearrangeForResponse(delay);

                        var responseBytes = frame.ToBytes();

                        writer.WriteLine($"{DateTime.Now}  Started sending response to {udpReceiveResult.RemoteEndPoint}.");
                        await socket.SendAsync(
                            responseBytes,
                            responseBytes.Length,
                            udpReceiveResult.RemoteEndPoint);

                        writer.WriteLine($"{DateTime.Now}  Finished sending response to {udpReceiveResult.RemoteEndPoint}.");
                    }
                    catch (Exception e)
                    {
                        writer.WriteLine(e.Message);
                    }
                }
            });
        }