let run listen_addr userfunc =
      let a =
        match listen_addr with
        | `Inet_any port -> Unix.ADDR_INET ((Unix.inet_addr_any, port))
        | `Inet_loopback port ->
            Unix.ADDR_INET ((Unix.inet_addr_loopback, port))
        | `Inet_str (str, port) ->
            Unix.ADDR_INET (((Unix.inet_addr_of_string str), port))
        | `Inet_addr (a, p) -> Unix.ADDR_INET ((a, p))
      in run_addr a userfunc