package affect

  1. Overview
  2. Docs
Streamlined and natural concurrency model for OCaml

Install

dune-project
 Dependency

Authors

Maintainers

Sources

affect-0.0.0.tbz
sha512=b328f6696e60c489da8cc2e8fad0537ca6634a39fc0c5de5840d4f98561f110617ef79ba8285ee8427dd99908c6b3d39114973598cddc5ded91abcce3b91b9a6

doc/affect.tmp/Net/Msg/index.html

Module Net.MsgSource

Send and receive messages over stream sockets.

Using simple length-value frames.

Sending

Sourceval send : Connection.t -> string -> (unit, string) result

send c msg sends the bytes msg on c. The result is:

  • Ok () if the frame for msg was seemingly sent successfuly.
  • Error e if the peer unexpectedly closed the connection or another error occurs. In this case you should proceed to Connection.close_noerr the connection.
Sourceval send' : Connection.t -> string -> (unit, Unix.error) result

send' is like send but you get the unix error status on error, in case you want to try to (unreliably) reason on the peer closure.

Sourceval wait_sendable : Connection.t -> 'tag -> 'tag Affect.Action.t

wait_sendable c tag is the action used by send. The action invocation is enabled and synchronizes with tag when a send can be initiated without blocking. However since multiple write(2) may be needed, the call can still block. This is just Affect_unix.Unix.wait_writable on the connection's file descriptor.

Receiving

Sourceval recv : Connection.t -> (string option, string) result

recv c receives a message from c. The result is:

  • Ok (Some msg) if msg was received in a frame.
  • Ok None if the connection was closed gracefuly (0 bytes were read at the beginning of the frame).
  • Error e is the peer unexpectedly closed the connection, if a frame is truncated or invalid, or if any other error occurs. In this case you should proceed to Connection.close_noerr the connection.
Sourceval wait_recvable : Connection.t -> 'tag -> 'tag Affect.Action.t

wait_recvable c tag is the action used by recv. The action invocation is enabled and synchronizes with tag when a recv can be initiated without blocking. However since mulitple read(2) may be needed the call can still block. This is just Affect_unix.Unix.wait_readable on the connection's file descriptor.