這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
// 接收UDP時間廣播,並設定系統時間func (sl *Slaver) masTimeSync(ch chan int) { // 開始監聽廣播時間 log.Printf("time sync listen [%s]", sl.Node.Port.PortUdpSlaTimeSync) for { (func() { // 監聽 mas 發來的同步時間 lis, err := socket.NewListen("", sl.Node.Port.PortUdpSlaTimeSync, 3).ListenUDP() // 判斷監聽是否建立成功 if err != nil { // 異常拋出 log.Fatalln(err) } // 保證監聽正常關閉 defer lis.Close() // 迴圈接收 for { // 每個時間戳記大小不超過32位元組 data := make([]byte, 32) // 讀取時間戳記 read, addr, err := lis.ReadFromUDP(data) // 檢查是否接收錯誤 if err != nil { // 錯誤時從新接收 continue } // 判斷是否為註冊伺服器所發 if addr != nil && strings.HasPrefix(addr.String(), sl.MasAddr) { // 轉換遠程時間戳記 l, _ := strconv.ParseInt(fmt.Sprintf("%s", data[0:read]), 10, 64) //// 轉換時間格式 //time := syscall.NsecToTimeval(l) //// 設定系統時間 "Linux Private Settimeofday" //if err := syscall.Settimeofday(&time); err != nil { // // 異常拋出 // log.Fatalln(err) //} // 設定到系統 cmd := exec.Command("date", "-s", time.Unix(0, l).Format("01/02/2006 15:04:05.999999999")) // 設定 cmd.Run() } } })() }}