Skip to content

Commit 4e69f23

Browse files
committed
cross-port previous client-mode TCP window fixes to server-mode
1 parent 43afc30 commit 4e69f23

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

lib/logstash/outputs/tcp.rb

+11-3
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class LogStash::Outputs::Tcp < LogStash::Outputs::Base
5353

5454
##
5555
# @param socket [Socket]
56-
# @param logger_context [#log_warn&#log_error]
56+
# @param logger_context [#log_warn&#log_error&#logger]
5757
class Client
5858
def initialize(socket, logger_context)
5959
@socket = socket
@@ -64,9 +64,17 @@ def initialize(socket, logger_context)
6464
def run
6565
loop do
6666
begin
67-
@socket.write(@queue.pop)
67+
payload = @queue.pop
68+
69+
@logger_context.logger.trace("transmitting #{payload.bytesize} bytes", socket: @socket&.peer) if @logger_context.logger.trace? && payload && !payload.empty?
70+
while payload && !payload.empty?
71+
written_bytes_size = @socket.write(payload)
72+
payload = payload.byteslice(written_bytes_size..-1)
73+
@logger_context.logger.log_trace(">transmitted #{written_bytes_size} bytes; #{payload.bytesize} bytes remain", socket: @socket&.peer) if @logger_context.logger.trace?
74+
sleep 0.1 unless payload.empty?
75+
end
6876
rescue => e
69-
@logger_context.log_warn("tcp output exception: socket write failed", e, :socket => @socket&.to_s)
77+
@logger_context.log_warn("tcp output exception: socket write failed", e, :socket => @socket&.peer)
7078
break
7179
end
7280
end

0 commit comments

Comments
 (0)