Luv is a binding to libuv, the cross-platform C library that does asynchronous I/O in Node.js and runs Node's main loop.
let () =
Luv.DNS.getaddrinfo ~family:`INET ~node:"google.com" ~service:"80" ()
begin fun result ->
let address = (List.hd (Result.get_ok result)).addr in
let socket = Luv.TCP.init () |> Result.get_ok in
Luv.TCP.connect socket address begin fun _ ->
Luv.Stream.write socket [Luv.Buffer.from_string "GET / HTTP/1.1\r\n\r\n"]
(fun _ _ -> Luv.Stream.shutdown socket ignore);
Luv.Stream.read_start socket (function
| Error `EOF -> Luv.Handle.close socket ignore
| Error _ -> exit 2
| Ok response -> print_string (Luv.Buffer.to_string response))
end
end;
ignore (Luv.Loop.run () : bool)This is the auto-generated API reference. For more conceptual information and examples, see:
Luv.Error — error handlingLuv.Loop — event loopsLuv.Buffer — byte buffersLuv.Handle — persistent objects (sockets, etc.)Luv.Stream — base type for TCP sockets, pipes, TTY handlesLuv.Request — contexts for asynchronous requestsLuv.Timer — timersLuv.Signal — signalsLuv.Process — subprocessesLuv.TCP — TCP socketsLuv.UDP — UDP socketsLuv.DNS — DNSLuv.Pipe — pipesLuv.TTY — consolesLuv.File — file operationsLuv.FS_event — filesystem eventsLuv.Thread_pool — libuv thread poolLuv.Thread — general system threadsLuv.TLS — thread-local storageLuv.Once — once-only barriersLuv.Mutex — mutexesLuv.Rwlock — read-write locksLuv.Semaphore — semaphoresLuv.Condition — condition variablesLuv.Barrier — barriersLuv.Env — environment variablesLuv.Time — current timeLuv.Path — relevant directoriesLuv.Random — system entropy sourceLuv.Sockaddr — network addressesLuv.Network — network interfaces and hostnameLuv.FS_poll — filesystem pollingLuv.Poll — file descriptor pollingLuv.Resource — resource usageLuv.System_info — system informationLuv.Pid — process idsLuv.Os_fd — system file descriptor interopLuv.DLL — dynamic linkingLuv.Passwd — current user informationLuv.Async — inter-loop communicationLuv.Metrics — loop metricsLuv.Prepare — pre-I/O callbacksLuv.Check — post-I/O callbacksLuv.Idle — per-iteration callbacksLuv.Version — libuv versionLuv.Require — feature checks