making WRITE/READ more accurate by emitting them at the socket (UDP/TCP) level

This commit is contained in:
HoneyryderChuck 2020-11-14 23:52:41 +00:00
parent 24088decf3
commit 777ab21050
4 changed files with 9 additions and 6 deletions

View File

@ -291,8 +291,6 @@ module HTTPX
break
end
log { "READ: #{siz} bytes..." }
parser << @read_buffer.to_s
break if @state == :closing || @state == :closed
@ -315,7 +313,6 @@ module HTTPX
on_error(ex)
return
end
log { "WRITE: #{siz} bytes..." }
if siz.zero?
write_drained = !@write_buffer.empty?

View File

@ -82,6 +82,7 @@ module HTTPX
# :nocov:
def read(size, buffer)
@io.read_nonblock(size, buffer)
log { "READ: #{buffer.bytesize} bytes..." }
buffer.bytesize
rescue ::IO::WaitReadable
buffer.clear
@ -92,6 +93,7 @@ module HTTPX
def write(buffer)
siz = @io.write_nonblock(buffer)
log { "WRITE: #{siz} bytes..." }
buffer.shift!(siz)
siz
rescue ::IO::WaitWritable
@ -109,6 +111,7 @@ module HTTPX
end
return if ret.nil?
log { "READ: #{buffer.bytesize} bytes..." }
buffer.bytesize
end
@ -117,6 +120,8 @@ module HTTPX
return 0 if siz == :wait_writable
return if siz.nil?
log { "WRITE: #{siz} bytes..." }
buffer.shift!(siz)
siz
end

View File

@ -7,11 +7,12 @@ module HTTPX
class UDP
include Loggable
def initialize(uri, _, _)
def initialize(uri, _, options)
ip = IPAddr.new(uri.host)
@host = ip.to_s
@port = uri.port
@io = UDPSocket.new(ip.family)
@options = options
end
def to_io
@ -40,6 +41,7 @@ module HTTPX
def write(buffer)
siz = @io.send(buffer, 0, @host, @port)
log { "WRITE: #{siz} bytes..." }
buffer.shift!(siz)
siz
end
@ -49,6 +51,7 @@ module HTTPX
def read(size, buffer)
data, _ = @io.recvfrom_nonblock(size)
buffer.replace(data)
log { "READ: #{buffer.bytesize} bytes..." }
buffer.bytesize
rescue ::IO::WaitReadable
0

View File

@ -169,7 +169,6 @@ module HTTPX
siz = @io.read(wsize, @read_buffer)
return unless siz && siz.positive?
log { "resolver: READ: #{siz} bytes..." }
parse(@read_buffer)
return if @state == :closed
end
@ -182,7 +181,6 @@ module HTTPX
siz = @io.write(@write_buffer)
return unless siz && siz.positive?
log { "resolver: WRITE: #{siz} bytes..." }
return if @state == :closed
end
end