You need to run your lwt code within Lwt_main.run This starts the lwt scheduler. Otherwise your application just terminates once it has created the lwt thread (which is a simple Ocaml value). Koen On Nov 27, 2016 18:30, "Raphael Bauduin" wrote: > Hi, > > After writing a small tcp server in ocaml, I wanted to make it work > asynchronously with Lwt. > I changed the function handling the accept on the socket to look like this: > > let rec accept_connection sock:Unix.file_descr = > let socket_thread = Lwt.return ( Unix.accept sock ) in > let _ = Lwt.bind socket_thread > ( fun (fd, caller) -> > ignore(Lwt_io.printf "accepted\n%!"); > (*let _ = set_nonblock fd in*) > Lwt.return (readall fd) >>= fun a -> > ignore(Lwt_io.printf "%s\n%!" a); > ignore(Lwt.async (fun () -> Lwt.return (close fd) ) ); > Lwt.return 0; > ); in > accept_connection sock > > The complete code is at http://pastie.org/10971189 . > > But it doesn't seem to work. The problems are: > - nothing is printed on stdout > - when I open 2 connections, the second can only be closed after the first > has been closed. > > In the mean time I've discovered Lwt_unix, but before looking at it, I'd > like to understand what's wrong in my current code. Can you spot errors in > the code? General advice is also welcome! > > Thanks > > Raphael > > >