| roberts  
 
  
 
 
 Group: Members
 Posts: 4983
 Joined: Oct. 2003
 | 
|  | Posted: Feb. 18 2007,05:46 |  |  Reading this script and a request for how to handle timeout, made me think of such capability using Lua sockets.
 
 So, just for fun, I cobbed together this little Lua socket program.
 
 It is working well for me. I run it manually prefixed with sudo.
 I did not call date using sudo as in newOldUser's original, as I call this lua program from /opt/bootlocal.sh
 
 Now when I boot my machine, I have a much more accurate clock set.
 
 You can see socket level programming is at a lower level than calling bash functions. But it does provide much more control.
 
 
 | Code Sample |  | #! /bin/lua --[[
 # This lua script based in part of the idea expressed in
 # the bash script from newOldUser of the damnsmall linux forums
 # by Robert Shingledecker - 2007/02/17
 # This script gets time information from time.nist.gov in
 # universal time format. It then rearranges it into
 # the format that the date command uses MMDDhhmmCCYY.ss
 # and issues the date command as super user.
 #
 # An internet connection must be available
 #
 #  sample of returned information follows
 #54144 07-02-13 16:14:43 00 0 0  95.3 UTC(NIST) *
 #1---0----1----1----2----2----3----3----4----4----5
 #1---5----0----5----0----5----0----5----0----5----0
 #
 --]]
 host = "time.nist.gov"
 port = 13
 target = {10,13,16,19,7,22}
 date = ""
 
 timeserver,err = socket.connect(host,port)
 if err then
 print("Could not connect "..err)
 os.exit(1)
 end
 _,err = timeserver:send("anything\n")
 if err then
 print("Error in sending "..err)
 os.exit(1)
 end
 timeserver:settimeout(0.10)
 while 1 do
 line,err = timeserver:receive('*l')
 if err then
 print("Error in receiving "..err)
 os.exit(1)
 end
 if string.find(line,"UTC") then
 for i = 1, 6 do
 if i == 5 then date = date .. "20" end
 if i == 6 then date = date .. "." end
 date = date .. string.sub(line,target[i],target[i]+1)
 end
 os.execute("date -u "..date)
 os.exit(0)
 end
 end
 
 | 
 
 Edited by roberts on Feb. 20 2007,19:31
 |