Module Hvsock.Af_hyperv

Low-level interface to the AF_HYPERV socket family available on Windows kernels.

type vmid =
| Wildcard(*

Any partition

*)
| Children(*

Any child partition

*)
| Loopback(*

The same partition

*)
| Parent(*

The parent partition

*)
| Id of Uuidm.t(*

A specific VM id

*)

A vmid identifies a VM, also known as a partition

val string_of_vmid : vmid -> string
type serviceid = string

A serviceid identifies a service (like a port number)

type sockaddr = {
vmid : vmid;(*

identifies a partition

*)
serviceid : serviceid;(*

identifies a service

*)
}

An AF_HVSOCK socket address

include Af_common.S with type sockaddr := sockaddr and type t = Unix.file_descr
type t = Unix.file_descr
val string_of_sockaddr : sockaddr -> string
val create : unit -> t

create () creates an unbound socket

val bind : t -> sockaddr -> unit

bind socket sockaddr binds socket to sockaddr

val listen : t -> int -> unit

listen socket queue_length sets the socket to listening mode with the given maximum queue length

val accept : t -> t * sockaddr

accept fd accepts a single connection

val connect : ?timeout_ms:int -> t -> sockaddr -> unit

connect ?timeout_ms fd sockaddr connects to a remote socket. On Windows the raw connect call can block forever if the server is not running when the call is executed (even if the server starts up afterwards) there is a default timeout of 300ms. On timeout this will raise Unix_error(Unix.ETIMEDOUT)

val writev : t -> Cstruct.t list -> int

Write a list of buffers

val read_into : t -> Cstruct.t -> int

Read into a buffer, returning the number of bytes written

val shutdown_read : t -> unit

Close the read half of the connection

val shutdown_write : t -> unit

Close the write half of the connection

val close : t -> unit

Close both halves of the connection

val vmid_of_name : string -> Uuidm.t

Look up a vmid given a VM's human-readable name. This function requires Administrator privileges.

val register_serviceid : string -> unit

Register the serviceid in the registry. This function requires Administrator privileges.