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); } } }); }