summaryrefslogtreecommitdiff
path: root/testsuite/tests/lib/socket/socket003.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/lib/socket/socket003.hs')
-rw-r--r--testsuite/tests/lib/socket/socket003.hs43
1 files changed, 43 insertions, 0 deletions
diff --git a/testsuite/tests/lib/socket/socket003.hs b/testsuite/tests/lib/socket/socket003.hs
new file mode 100644
index 0000000000..ea88a34dde
--- /dev/null
+++ b/testsuite/tests/lib/socket/socket003.hs
@@ -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)) ->
+ inet_ntoa haddr >>= \ na ->
+ putStr ("*** Start of Transfer from: " ++ na ++ "***\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
+