Version dev
This is a preliminary version of the documentation. Help us to improve it by filling tickets. We are looking for native english speakers to proof read the documentation. Contact us!
module Lwt_unix:Cooperative system callssig..end
Unix module of the standard library, but mapped into cooperative ones, which will not block the program, letting other threads run.The semantic of all operations is the following: if the action (for example reading from a file descriptor) can be performed immediatly, it is done and returns immediatly, otherwise it returns a sleeping threads which is waked up when the operation completes.
Moreover all sleeping threads returned by function of this modules are cancelable, this means that you can cancel them with Lwt.cancel. For example if you want to read something from a file descriptor with a timeout, you can cancel the action after the timeout and the reading will not be performed if not already done.
More precisely, assuming that you have two file descriptor fd1 and fd2 and you want to read something from fd1 or exclusively from fd2, and fail with an exception if a timeout of 1 second expires, without reading anything from fd1 and fd2, even if they become readable in the future.
Then you can do:
Lwt.select [Lwt_unix.timeout 1.0; read fd1 buf1 ofs1 len1; read fd2 buf2 ofs2 len2] In this case it is guaranteed that exactly one of the three operations will completes, and other will just be cancelled.
val sleep : float -> unit Lwt.tsleep d is a threads which remain suspended for d seconds and then terminates.val yield : unit -> unit Lwt.tyield () is a threads which suspends itself and then resumes as soon as possible and terminates.val auto_yield : float -> unit -> unit Lwt.tauto_yield timeout returns a function f which will yield every timeout seconds.exception Timeout
val timeout : float -> 'a Lwt.tval with_timeout : float -> (unit -> 'a Lwt.t) -> 'a Lwt.twith_timeout d f is a short-hand for:
Lwt.select [Lwt_unix.timeout d; f ()] type file_descr Unix.file_descr) and a state.A file descriptor may be:
type state = | | Open | (* | The file descriptor is opened | *) |
| | Closed | (* | The file descriptor has been closed by Lwt_unix.close. It must not be used for any operation. | *) |
| | Aborted of | (* | The file descriptor has been aborted, the only operation possible is Lwt_unix.close, all others will fail. | *) |
val state : file_descr -> statestate fd returns the state of fdval unix_file_descr : file_descr -> Unix.file_descrOpen.val of_unix_file_descr : Unix.file_descr -> file_descrval of_unix_file_descr_blocking : Unix.file_descr -> file_descrLwt_unix uses file descriptors in non-blocking mode, but in certain cases, like for standard descriptors (Lwt_unix.stdin, Lwt_unix.stdout and Lwt_unix.stderr) we do not want that. This function do not modify the file descritpor flags but other operations involving it may be a bit less efficient, since Lwt_unix will always check that the file descriptor is ready before using it.
Note: this is not 100% safe to use file descriptors in blocking mode, so you should avoid doing it.
val blocking : file_descr -> boolblocking fd returns whether fd is used in blocking or non-blocking mode.val set_blocking : file_descr -> bool -> unitset_blocking fd b puts fd in blocking or non-blocking mode.val abort : file_descr -> exn -> unitabort fd exn makes all current and further uses of the file descriptor fail with the given exception. This put the file descriptor into the Aborted state. If the file descrptor is closed, this does nothing, if it is aborted, this replace the abort exception by exn.
val close : file_descr -> unitClosedval set_close_on_exec : file_descr -> unitUnix.set_close_on_execval stdin : file_descrval stdout : file_descrval stderr : file_descrval read : file_descr -> string -> int -> int -> int Lwt.tread fd buf ofs len has the same semantic as Unix.read, but is cooperativeval write : file_descr -> string -> int -> int -> int Lwt.tread fd buf ofs len has the same semantic as Unix.write, but is cooperativeval wait_read : file_descr -> unit Lwt.tval wait_write : file_descr -> unit Lwt.tval pipe : unit -> file_descr * file_descrpipe () creates pipe using Unix.pipe and returns two lwt file descriptors created from unix file_descriptorval pipe_in : unit -> file_descr * Unix.file_descrpipe_in () is the same as Lwt_unix.pipe but maps only the unix file descriptor for reading into a lwt one. The second is not put into non-blocking mode. You usually want to use this before forking to receive data from the child process.val pipe_out : unit -> Unix.file_descr * file_descrpipe_out () is the inverse of Lwt_unix.pipe_in. You usually want to use this before forking to send data to the child processval signal : int -> < event : int React.event; stop : unit >signal signum returns an object with a method event which is the event occuring each time the signal number signum is received by the running process. The stop method is used to tell Lwt that you are no longer interessed in this event.
type resource_usage = { | ru_utime : | (* | User time used | *) |
| ru_stime : | (* | System time used | *) |
val wait : unit -> (int * Unix.process_status) Lwt.tUnix.waitval waitpid : Unix.wait_flag list -> int -> (int * Unix.process_status) Lwt.tUnix.waitpidval wait4 : Unix.wait_flag list ->
int -> (int * Unix.process_status * resource_usage) Lwt.twait4 flags pid returns (pid, status, rusage) where (pid, status) is the same result as Unix.waitpid flags pid, and rusage contains accounting information about the child.val has_wait4 : boolwait4 system call is available on this system. If it is not, them wait4 will always returns { utime = 0.0; stime = 0.0 } as resource usages.val system : string -> Unix.process_status Lwt.tUnix.systemval socket : Unix.socket_domain -> Unix.socket_type -> int -> file_descrsocket domain type proto is the same as Unix.socket but maps the result into a lwt file descriptorval socketpair : Unix.socket_domain ->
Unix.socket_type -> int -> file_descr * file_descrUnix.socketpairval bind : file_descr -> Unix.sockaddr -> unitUnix.bindval listen : file_descr -> int -> unitUnix.listenval accept : file_descr -> (file_descr * Unix.sockaddr) Lwt.tUnix.acceptval accept_n : file_descr ->
int -> (file_descr * Unix.sockaddr) list Lwt.taccept_n fd count accepts up to count connection in one time.count are available, it returns all of themcount are available, it returns the next countaccept_n has the advantage of improving performances. If you want a more detailed description, you can have a look at:val connect : file_descr -> Unix.sockaddr -> unit Lwt.tUnix.connectval shutdown : file_descr -> Unix.shutdown_command -> unitUnix.shutdownval setsockopt : file_descr -> Unix.socket_bool_option -> bool -> unitUnix.setsockopttype credentials = { | cred_pid : |
| cred_uid : |
| cred_gid : |
val get_credentials : file_descr -> credentialsget_credentials fd returns credentials informations from the given socket.type io_vector = { | iov_buffer : |
| iov_offset : |
| iov_length : |
val io_vector : buffer:string -> offset:int -> length:int -> io_vectorval recv_msg : socket:file_descr ->
io_vectors:io_vector list -> (int * Unix.file_descr list) Lwt.trecv_msg ~socket ~io_vectors receives data into a list of io-vectors, plus any file-descriptors that may accompany the message.val send_msg : socket:file_descr ->
io_vectors:io_vector list -> fds:Unix.file_descr list -> int Lwt.tsend_msg ~socket ~io_vectors ~fds sends data from a list of io-vectors, accompanied with a list of file-descriptor.val daemonize : ?keep_stderr:bool -> ?keep_umask:bool -> unit -> unitstdin, stdout and stderr are redirected to "/dev/null". If keep_stderr is true, then stderr is left unchanged. If keep_umask is true, the umask remain unchanged, otherwise it is set to 0o022.
keep_stderr and keep_umask both defaults to false.
type watchers exception Retry
Lwt_unix.Retry, it will be requeued until the file descriptor becomes readable/writable again.exception Retry_read
Lwt_unix.Retry_read, it will be requeued until the file descriptor becomes readable.exception Retry_write
Lwt_unix.Retry_read, it will be requeued until the file descriptor becomes writables.val inputs : watchersval outputs : watchersval wrap_syscall : watchers -> file_descr -> (unit -> 'a) -> 'a Lwt.twrap_syscall set fd action wrap an action on a file descriptor. It tries to execture action, and if it can not be performed immediately without blocking, it is registered for latter. In the latter case, if the thread is canceled, action is removed from set.
val check_descriptor : file_descr -> unitcheck_descriptor fd raise an exception if fd is not in the state Openval register_action : watchers -> file_descr -> (unit -> 'a) -> 'a Lwt.tregister_action set fd action registers action on fd. When fd becomes readable/writable action is called.Note:
check_descriptor fd before calling register_actionLwt_unix.wrap_syscall