blob: 85c00e4ebad745f13a2e78fc745e849bbe466f73 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
{- 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
|