mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-04 00:00:37 -04:00
47 lines
1.1 KiB
Ruby
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
|