1 val addr
= INetSock
.any
0
2 val socket
= INetSock
.TCP
.socket ()
3 val _
= Socket
.bind (socket
, addr
)
4 val _
= Socket
.listen (socket
, 5)
5 val addr
= Socket
.Ctl
.getSockName socket
7 fun read socket
: string =
8 Byte
.unpackStringVec (Word8VectorSlice
.full (Socket
.recvVec (socket
, 100)))
10 fun readNB socket
: string option
=
11 Option
.map (Byte
.unpackStringVec
o Word8VectorSlice
.full
)
12 (Socket
.recvVecNB (socket
, 100))
14 fun write (socket
, s
: string): unit
=
15 (Socket
.sendVec (socket
, Word8VectorSlice
.full (Byte
.stringToBytes s
))
19 print (case Socket
.acceptNB socket
of
21 | SOME _
=> "WRONG\n")
24 case Posix
.Process
.fork () of
27 val _
= Posix
.Process
.sleep (Time
.fromSeconds
1)
28 val (socket
, _
) = Socket
.accept socket
29 val _
= print (read socket
)
30 val _
= print (case readNB socket
of
33 val _
= write (socket
, "goodbye, world\n");
34 val _
= Socket
.close socket
40 val socket
' = INetSock
.TCP
.socket ()
41 val _
= Socket
.connect (socket
', addr
)
42 val _
= write (socket
', "hello, world\n")
43 val _
= print (read socket
')
44 val _
= Socket
.close socket
'
45 val (pid
', status
) = Posix
.Process
.wait ()
47 if pid
= pid
' andalso status
= Posix
.Process
.W_EXITED
49 else print
"child failed\n"