Sha256: e798b1ed1be53a9b74287588f3d520c0985502bb17e661966f308a8f9e8e06bb

Contents?: true

Size: 1.61 KB

Versions: 40

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true

require "forwardable"

module HTTPX
  class UNIX < TCP
    extend Forwardable

    using URIExtensions

    attr_reader :path

    alias_method :host, :path

    def initialize(origin, addresses, options)
      @addresses = addresses
      @hostname = origin.host
      @state = :idle
      @options = Options.new(options)
      @fallback_protocol = @options.fallback_protocol
      if @options.io
        @io = case @options.io
              when Hash
                @options.io[origin.authority]
              else
                @options.io
        end
        raise Error, "Given IO objects do not match the request authority" unless @io

        @path = @io.path
        @keep_open = true
        @state = :connected
      else
        if @options.transport_options
          # :nocov:
          warn ":#{__method__} is deprecated, use :addresses instead"
          @path = @options.transport_options[:path]
          # :nocov:
        else
          @path = addresses.first
        end
      end
      @io ||= build_socket
    end

    def connect
      return unless closed?

      begin
        if @io.closed?
          transition(:idle)
          @io = build_socket
        end
        @io.connect_nonblock(Socket.sockaddr_un(@path))
      rescue Errno::EISCONN
      end
      transition(:connected)
    rescue Errno::EINPROGRESS,
           Errno::EALREADY,
           ::IO::WaitReadable
    end

    # :nocov:
    def inspect
      "#<#{self.class}(path: #{@path}): (state: #{@state})>"
    end
    # :nocov:

    private

    def build_socket
      Socket.new(Socket::PF_UNIX, :STREAM, 0)
    end
  end
end

Version data entries

40 entries across 40 versions & 1 rubygems

Version Path
httpx-0.20.5 lib/httpx/io/unix.rb
httpx-0.20.4 lib/httpx/io/unix.rb
httpx-0.20.3 lib/httpx/io/unix.rb
httpx-0.20.2 lib/httpx/io/unix.rb
httpx-0.20.1 lib/httpx/io/unix.rb
httpx-0.20.0 lib/httpx/io/unix.rb
httpx-0.19.8 lib/httpx/io/unix.rb
httpx-0.19.7 lib/httpx/io/unix.rb
httpx-0.19.6 lib/httpx/io/unix.rb
httpx-0.19.5 lib/httpx/io/unix.rb
httpx-0.19.4 lib/httpx/io/unix.rb
httpx-0.19.3 lib/httpx/io/unix.rb
httpx-0.19.2 lib/httpx/io/unix.rb
httpx-0.19.1 lib/httpx/io/unix.rb
httpx-0.19.0 lib/httpx/io/unix.rb
httpx-0.18.7 lib/httpx/io/unix.rb
httpx-0.18.6 lib/httpx/io/unix.rb
httpx-0.18.5 lib/httpx/io/unix.rb
httpx-0.18.4 lib/httpx/io/unix.rb
httpx-0.18.3 lib/httpx/io/unix.rb