lib/middleman-core/preview_server/tcp_port_prober.rb



module Middleman
  class PreviewServer
    # Probe for tcp ports
    #
    # This one first tries `try_port` if this is not available use the free
    # port returned by TCPServer.
    class TcpPortProber
      # Check for port
      #
      # @param [Integer] try_port
      #   The port to be checked
      #
      # @return [Integer]
      #   The port
      def port(try_port)
        server = TCPServer.open(try_port)
        server.close

        try_port
      rescue
        server = TCPServer.open(0)
        port = server.addr[1]
        server.close

        port
      end
    end
  end
end