sig
  module AF :
    sig
      type tag = [ `AF_INET ]
      type address = Cf_ip4_addr.opaque Cf_ip4_addr.t * int
      val domain : tag Cf_socket.domain
      val to_sockaddr : address -> tag Cf_socket.sockaddr
      val of_sockaddr : tag Cf_socket.sockaddr -> address
      val unspecified : tag Cf_socket.sockaddr
    end
  module TCP :
    sig
      module AF :
        sig
          type tag = [ `AF_INET ]
          type address = Cf_ip4_addr.opaque Cf_ip4_addr.t * int
          val domain : tag Cf_socket.domain
          val to_sockaddr : address -> tag Cf_socket.sockaddr
          val of_sockaddr : tag Cf_socket.sockaddr -> address
          val unspecified : tag Cf_socket.sockaddr
        end
      module ST :
        sig
          type tag = [ `SOCK_STREAM ]
          val socktype : tag Cf_socket.socktype
        end
      val protocol : Cf_socket.protocol
    end
  module UDP :
    sig
      module AF :
        sig
          type tag = [ `AF_INET ]
          type address = Cf_ip4_addr.opaque Cf_ip4_addr.t * int
          val domain : tag Cf_socket.domain
          val to_sockaddr : address -> tag Cf_socket.sockaddr
          val of_sockaddr : tag Cf_socket.sockaddr -> address
          val unspecified : tag Cf_socket.sockaddr
        end
      module ST :
        sig
          type tag = [ `SOCK_DGRAM ]
          val socktype : tag Cf_socket.socktype
        end
      val protocol : Cf_socket.protocol
    end
  type mreq = {
    imr_multiaddr : Cf_ip4_addr.multicast Cf_ip4_addr.t;
    imr_interface : Cf_ip4_addr.unicast Cf_ip4_addr.t;
  }
  val ip_ttl : (int, [ `AF_INET ], 'a) Cf_socket.sockopt
  val ip_add_membership :
    (Cf_ip4_proto.mreq, [ `AF_INET ], [ `SOCK_DGRAM ]) Cf_socket.sockopt
  val ip_drop_membership :
    (Cf_ip4_proto.mreq, [ `AF_INET ], [ `SOCK_DGRAM ]) Cf_socket.sockopt
  val ip_multicast_if :
    (Cf_ip4_addr.unicast Cf_ip4_addr.t, [ `AF_INET ], [ `SOCK_DGRAM ])
    Cf_socket.sockopt
  val ip_multicast_ttl :
    (int, [ `AF_INET ], [ `SOCK_DGRAM ]) Cf_socket.sockopt
  val ip_multicast_loop :
    (bool, [ `AF_INET ], [ `SOCK_DGRAM ]) Cf_socket.sockopt
  val siocgifaddr :
    ([ `AF_INET ], 'a) Cf_socket.t ->
    string -> [> Cf_ip4_addr.unicast ] Cf_ip4_addr.t
end