Sha256: 56e72f3821ed1894241eb9bbd7461ef90d8f02679c2e83aa9e47f2067bfcf0e4

Contents?: true

Size: 815 Bytes

Versions: 2

Compression:

Stored size: 815 Bytes

Contents

# frozen_string_literal: true

module Nonnative
  class Port
    def initialize(process)
      @process = process
      @timeout = Nonnative::Timeout.new(process.timeout)
    end

    def open?
      timeout.perform do
        open_socket
        true
      rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
        sleep_interval
        retry
      end
    end

    def closed?
      timeout.perform do
        open_socket
        raise Nonnative::Error
      rescue Nonnative::Error
        sleep_interval
        retry
      rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ECONNRESET
        true
      end
    end

    private

    attr_reader :process, :timeout

    def open_socket
      TCPSocket.new('127.0.0.1', process.port).close
    end

    def sleep_interval
      sleep 0.01
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
nonnative-1.4.0 lib/nonnative/port.rb
nonnative-1.3.0 lib/nonnative/port.rb