httpx/test/support/servlets/slow_reader.rb
2022-08-06 22:30:46 +01:00

47 lines
1.1 KiB
Ruby

# frozen_string_literal: true
require "socket"
class SlowReader
def initialize
@server = TCPServer.new("127.0.0.1", 0)
@server.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVBUF, 5)
@can_log = ENV.key?("HTTPX_DEBUG")
end
def origin
_, sock, ip, _ = @server.addr
"http://#{ip}:#{sock}"
end
def start
loop do
sock = @server.accept
begin
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVBUF, 5)
request = +""
5.times do
request << sock.readpartial(2048)
warn "buffered request: #{request.size} (closed? #{sock.closed?})" if @can_log
sleep(1)
end
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVBUF, 65_535)
request << sock.readpartial(2048)
# warn "request: #{request.size}" if @can_log
response = "HTTP/1.1 200\r\nContent-Length: 0\r\nConnection: close\r\n\r\n"
sock.puts(response)
rescue IOError => e
warn e.message
ensure
sock.close
end
end
rescue IOError
end
def shutdown
@server.close
end
end