packages feed

timberc-1.0.1: examples/PingTimeServers.t

-- Possible call
-- ./PingTimeServers time.nist.gov time-a.nist.gov time.ien.it
-- NB: It is explicitly disallowed to ask a NIST time server for time 
-- more frequently than once every 4 seconds.


module PingTimeServers where

import POSIX
import Data.Functional.List

port = Port 13  -- standard port for time servers

client neterror report sock = class

    established = action
       sock.inFile.installR report

    close = request result ()

    result Connection {..}
 

root env = class

    args = [1..size env.argv-1] 
    print i mess = env.stdout.write (env.argv!i ++ ": "++ mess ++ "\n")

    outstanding := args

    report i mess = action
       outstanding := delete i outstanding
       print i mess
       if (null outstanding) then env.exit 0
    
    result action
       forall i <- args do
          env.inet.tcp.connect (Host (env.argv!i)) port (client (report i) (report i))
       after (sec 2) action
          forall i <- outstanding do 
             print i "no response"
          env.exit 0