sig
  module P :
    sig
      module AF :
        sig
          type tag_t = [ `AF_INET6 ]
          type address_t = Cf_ip6_addr.opaque Cf_ip6_addr.t * int
          val domain : tag_t Cf_socket.domain_t
          val to_sockaddr : address_t -> tag_t Cf_socket.sockaddr_t
          val of_sockaddr : tag_t Cf_socket.sockaddr_t -> address_t
          val unspecified : tag_t Cf_socket.sockaddr_t
        end
      module ST :
        sig
          type tag_t = [ `SOCK_DGRAM ]
          val socktype : tag_t Cf_socket.socktype_t
        end
      val protocol : Cf_socket.protocol_t
    end
  type t = (P.AF.tag_t, P.ST.tag_t) Cf_socket.t
  type address_t = P.AF.address_t
  val create : unit -> t
  val createpair : unit -> t * t
  class basic :
    ?sock:t ->
    unit ->
    object
      val socket_ : t
      method private bind : address_t -> unit
      method close : unit
      method dup : t
      method dup2 : t -> unit
      method fd : Unix.file_descr
      method private getpeername : address_t
      method private getsockname : address_t
      method getsockopt :
        ('a, P.AF.tag_t, P.ST.tag_t) Cf_socket.sockopt_t -> 'a
      method setsockopt :
        ('b, P.AF.tag_t, P.ST.tag_t) Cf_socket.sockopt_t -> '-> unit
      method private shutdown : Unix.shutdown_command -> unit
      method socket : t
    end
  class endpoint :
    t ->
    object
      val socket_ : t
      method private bind : address_t -> unit
      method close : unit
      method connect : address_t -> unit
      method dup : t
      method dup2 : t -> unit
      method fd : Unix.file_descr
      method getpeername : address_t
      method getsockname : address_t
      method getsockopt :
        ('a, P.AF.tag_t, P.ST.tag_t) Cf_socket.sockopt_t -> 'a
      method recv :
        ?flags:Cf_socket.msg_flags_t -> string -> int -> int -> int
      method recvfrom :
        ?flags:Cf_socket.msg_flags_t ->
        string -> int -> int -> int * address_t
      method send :
        ?flags:Cf_socket.msg_flags_t -> string -> int -> int -> int
      method sendto :
        ?flags:Cf_socket.msg_flags_t ->
        string -> int -> int -> address_t -> int
      method setsockopt :
        ('b, P.AF.tag_t, P.ST.tag_t) Cf_socket.sockopt_t -> '-> unit
      method shutdown : Unix.shutdown_command -> unit
      method socket : t
    end
end