private DateTime GetTimeFromServer() { using (var socket = _adapter.OpenSocket(_host, 123, false)) { socket.DataReceived += OnDataReceived; Array.Clear(_packet, 0, _packet.Length); _packet[0] = 0xe3; // LI, Version and Mode _packet[1] = 0; // Stratum or type of clock _packet[2] = 6; // Polling interval _packet[3] = 0xEC; // Peer clock precision // Leave eight bytes of zeros for root delay and root dispersion _packet[12] = 49; _packet[13] = 0x4E; _packet[14] = 49; _packet[15] = 52; socket.Send(_packet); #if DEBUG _responseReceived.WaitOne(); #else // wait for a response if (!_responseReceived.WaitOne(5000, false)) { throw new Exception("No SNTP respose received"); } #endif } var result = _lastTimeRetrieved; _lastTimeRetrieved = DateTime.MinValue; return(result); }
private ISocket GetSocket(string host, int port) { var socket = _adapter.OpenSocket(host, port, true); socket.SocketClosed += SocketOnSocketClosed; socket.DataReceived += SocketOnDataReceived; return(socket); }