[project @ 1996-01-08 20:28:12 by partain]
[ghc-hetmet.git] / ghc / misc / examples / net003 / Main.hs
diff --git a/ghc/misc/examples/net003/Main.hs b/ghc/misc/examples/net003/Main.hs
new file mode 100644 (file)
index 0000000..85c00e4
--- /dev/null
@@ -0,0 +1,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
+