class HTTP::Timeout::Null
def close
def close @socket&.close end
def closed?
def closed? @socket&.closed? end
def connect(socket_class, host, port, nodelay = false)
def connect(socket_class, host, port, nodelay = false) @socket = socket_class.open(host, port) @socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) if nodelay end
def connect_ssl
def connect_ssl @socket.connect end
def initialize(options = {})
def initialize(options = {}) @options = options end
def readpartial(size, buffer = nil)
def readpartial(size, buffer = nil) @socket.readpartial(size, buffer) rescue EOFError :eof end
def rescue_readable(timeout = read_timeout)
def rescue_readable(timeout = read_timeout) yield rescue IO::WaitReadable retry if @socket.to_io.wait_readable(timeout) raise TimeoutError, "Read timed out after #{timeout} seconds" end
def rescue_writable(timeout = write_timeout)
def rescue_writable(timeout = write_timeout) yield rescue IO::WaitWritable retry if @socket.to_io.wait_writable(timeout) raise TimeoutError, "Write timed out after #{timeout} seconds" end
def start_tls(host, ssl_socket_class, ssl_context)
def start_tls(host, ssl_socket_class, ssl_context) @socket = ssl_socket_class.new(socket, ssl_context) @socket.hostname = host if @socket.respond_to? :hostname= @socket.sync_close = true if @socket.respond_to? :sync_close= connect_ssl return unless ssl_context.verify_mode == OpenSSL::SSL::VERIFY_PEER return if ssl_context.respond_to?(:verify_hostname) && !ssl_context.verify_hostname @socket.post_connection_check(host) end
def write(data)
def write(data) @socket.write(data) end