MCPcopy Index your code
hub / github.com/GoEdgeLab/EdgeNode / ReadServer

Method ReadServer

internal/utils/clock/manager.go:145–181  ·  view source on GitHub ↗

ReadServer 参考自:https://medium.com/learning-the-go-programming-language/lets-make-an-ntp-client-in-go-287c4b9a969f

(server string)

Source from the content-addressed store, hash-verified

143
144// ReadServer 参考自:https://medium.com/learning-the-go-programming-language/lets-make-an-ntp-client-in-go-287c4b9a969f
145func (this *ClockManager) ReadServer(server string) (time.Time, error) {
146 conn, err := net.Dial("udp", server+":123")
147 if err != nil {
148 return time.Time{}, fmt.Errorf("connect to server failed: %w", err)
149 }
150 defer func() {
151 _ = conn.Close()
152 }()
153 err = conn.SetDeadline(time.Now().Add(5 * time.Second))
154 if err != nil {
155 return time.Time{}, err
156 }
157
158 // configure request settings by specifying the first byte as
159 // 00 011 011 (or 0x1B)
160 // | | +-- client mode (3)
161 // | + ----- version (3)
162 // + -------- leap year indicator, 0 no warning
163
164 var req = &NTPPacket{Settings: 0x1B}
165 err = binary.Write(conn, binary.BigEndian, req)
166 if err != nil {
167 return time.Time{}, fmt.Errorf("write request failed: %w", err)
168 }
169
170 var resp = &NTPPacket{}
171 err = binary.Read(conn, binary.BigEndian, resp)
172 if err != nil {
173 return time.Time{}, fmt.Errorf("write server response failed: %w", err)
174 }
175
176 const ntpEpochOffset = 2208988800
177
178 var secs = float64(resp.TxTimeSec) - ntpEpochOffset
179 var nanos = (int64(resp.TxTimeFrac) * 1e9) >> 32
180 return time.Unix(int64(secs), nanos), nil
181}

Callers 2

SyncMethod · 0.95
TestReadServerFunction · 0.80

Calls 7

ErrorfMethod · 0.80
UnixMethod · 0.80
CloseMethod · 0.65
AddMethod · 0.65
WriteMethod · 0.65
ReadMethod · 0.65
SetDeadlineMethod · 0.45

Tested by 1

TestReadServerFunction · 0.64