diff options
Diffstat (limited to 'testsuite/tests/lib/socket/socket007.hs')
-rw-r--r-- | testsuite/tests/lib/socket/socket007.hs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/testsuite/tests/lib/socket/socket007.hs b/testsuite/tests/lib/socket/socket007.hs new file mode 100644 index 0000000000..fbc9ff04e0 --- /dev/null +++ b/testsuite/tests/lib/socket/socket007.hs @@ -0,0 +1,44 @@ +{- server + +As net003 but uses the BSD module for portability. Also prints the +common name of the host rather than its IP number. + +TESTS: + getProtocolNumber + getSocketName + getHostByAddr + +-} + +module Main where + +import BSD +import SocketPrim + +main = + getProtocolNumber "tcp" >>= \ proto -> + socket AF_INET Stream proto >>= \ 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)) -> + getHostByAddr AF_INET haddr >>= \ (HostEntry hname _ _ _) -> + putStr ("*** Start of Transfer from: " ++ hname ++ "***\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 |