1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

fix r63587

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63589 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
naruse 2018-06-06 08:39:36 +00:00
parent 37ea653080
commit 685fdbe64c

View file

@ -245,32 +245,32 @@ module Net # :nodoc:
def write0(*strs)
@debug_output << strs.map(&:dump).join if @debug_output
case len = @io.write_nonblock(strs.join, exception: false)
when Integer
orig_len = len
strs.each_with_index do |str, i|
@written_bytes += str.bytesize
orig_written_bytes = @written_bytes
strs.each_with_index do |str, i|
need_retry = true
case len = @io.write_nonblock(str, exception: false)
when Integer
@written_bytes += len
len -= str.bytesize
if len == 0
if strs.size == i+1
return orig_len
return @written_bytes - orig_written_bytes
else
strs = strs[i+1..] # rest
break
need_retry = false
# next string
end
elsif len < 0
strs = strs[i..] # str and rest
strs[0] = str[len, -len]
break
str = str[len, -len]
else # len > 0
# next
need_retry = false
# next string
end
end
# continue looping
when :wait_writable
@io.to_io.wait_writable(@write_timeout) or raise Net::WriteTimeout
# continue looping
end while true
# continue looping
when :wait_writable
@io.to_io.wait_writable(@write_timeout) or raise Net::WriteTimeout
# continue looping
end while need_retry
end
end
#