function time_nist, toffset=toffset,netdelaytime=netdelaytime,forcetime=forcetime
common time_nist_com, last_checktime, time_offset
st = systime(1)
if n_elements(last_checktime) eq 0 then last_checktime = 0d
if n_elements(forcetime) eq 0 then forcetime=3600d
if st - last_checktime gt (forcetime > 5) then begin
if n_elements(time_offset) eq 0 then time_offset = 0d
dummy=''
timestr=''
server = 'time.nist.gov'
socket,fp,/get_lun,server,13,error=error ,connect_timeout=2
if error ne 0 then begin
dprint,dlevel=2,phelp=2,!error_state
endif else if ~eof(fp) then begin
readf,fp,dummy
readf,fp,timestr
free_lun,fp
endif else dprint,dlevel=2,'Unexpected EOF encountered'
netdelaytime = systime(1) - st
if strlen(timestr) gt 36 then begin
truetime = time_double( strmid(timestr,6,17) ) - double( strmid(timestr,31,5) )/1000
time_offset = truetime-st - netdelaytime
endif else dprint,dlevel=2,'Read error'
dprint,dlevel=3,/phelp,server,timestr,time_offset,netdelaytime
last_checktime = st
endif else netdelaytime = 0d
toffset = time_offset
return , st + time_offset
end