Hi,
Below is a little ML code that prints out everything that gets sent to
port 8080. On linux this behaves much as expected, but on MacOS, as soon
as the Socket.accept call is made, it uses 100% of processor.
The code:
(*
Reproducable on
Mac OS X 10.6.5
PolyML 5.4
Not reproducable on
Linux :)
After calling main() the CPU usage becomes 100%.
After connecting to this server socket by doing
telnet localhost 8080
the CPU usage is still 100%.
*)
fun mkServerSocket () =
let
val server = INetSock.TCP.socket();
val _ = Socket.bind(server, INetSock.any 8080);
val _ = Socket.Ctl.setREUSEADDR(server,true);
val saddr = INetSock.fromAddr(Socket.Ctl.getSockName server);
val _ = Socket.listen(server,128);
in (saddr,server) end;
fun readLoop active_socket =
let
val s = Byte.bytesToString(Socket.recvVec(active_socket,80));
val _ = PolyML.print s; (* print to output *)
in
(PolyML.print "about to read...\n"; readLoop active_socket)
end;
fun main() =
let
val (saddr, server_socket) = mkServerSocket ()
val (active_socket, active_socket_addr) =
Socket.accept server_socket
in
readLoop active_socket
end;
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.