Ticket #42: socket003.hs

File socket003.hs, 0.8 kB (added by igloo, 3 years ago)
Line 
1{- server
2
3As for net001 but gets the system to allocate the next free port
4number.  It also prints out the IP number of the peer.
5
6TESTS:
7    getSocketName
8    inet_ntoa
9
10-}
11
12module Main where
13
14import SocketPrim
15
16
17main =
18    socket AF_INET Stream 6                     >>= \ s ->
19    bindSocket s (SockAddrInet aNY_PORT iNADDR_ANY)     >>
20    getSocketName s                             >>= \ (SockAddrInet port _) ->
21    putStr ("Allocated Port Number: " ++ show port ++ "\n") >>
22    listen s 5                                  >>
23
24
25    let 
26      loop =
27        accept s                >>= \ (s',(SockAddrInet _ haddr)) ->
28        inet_ntoa haddr         >>= \ na ->
29        putStr ("*** Start of Transfer from: " ++  na ++ "***\n")       >>
30        let 
31          read_all =
32            readSocket s' 4                     >>= \ (str, nbytes) ->
33            if nbytes /= 0 then
34                putStr str                      >>
35                read_all
36            else
37                putStr "\n*** End of Transfer ***\n" >>
38                sClose s'
39        in
40            read_all   
41    in
42        loop