{- server As for net001 but gets the system to allocate the next free port number. It also prints out the IP number of the peer. TESTS: getSocketName inet_ntoa -} module Main where import SocketPrim main = socket AF_INET Stream 6 >>= \ s -> bindSocket s (SockAddrInet aNY_PORT iNADDR_ANY) >> getSocketName s >>= \ (SockAddrInet port _) -> putStr ("Allocated Port Number: " ++ show port ++ "\n") >> listen s 5 >> let loop = accept s >>= \ (s',(SockAddrInet _ haddr)) -> putStr ("*** Start of Transfer from: " ++ (inet_ntoa haddr) ++ "***\n") >> let read_all = readSocket s' 4 >>= \ (str, nbytes) -> if nbytes /= 0 then putStr str >> read_all else putStr "\n*** End of Transfer ***\n" >> sClose s' in read_all in loop