Skip to content

Commit 3145a20

Browse files
committed
cross-port previous client-mode TCP window fixes to server-mode
1 parent 29fb38e commit 3145a20

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

lib/logstash/outputs/tcp.rb

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,20 +53,29 @@ 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
60+
@peer_info = socket.peer
6061
@logger_context = logger_context
6162
@queue = Queue.new
6263
end
6364

6465
def run
6566
loop do
6667
begin
67-
@socket.write(@queue.pop)
68+
payload = @queue.pop
69+
70+
@logger_context.logger.trace("transmitting #{payload.bytesize} bytes", socket: @peer_info) if @logger_context.logger.trace? && payload && !payload.empty?
71+
while payload && !payload.empty?
72+
written_bytes_size = @socket.write(payload)
73+
payload = payload.byteslice(written_bytes_size..-1)
74+
@logger_context.logger.log_trace(">transmitted #{written_bytes_size} bytes; #{payload.bytesize} bytes remain", socket: @socket&.peer) if @logger_context.logger.trace?
75+
sleep 0.1 unless payload.empty?
76+
end
6877
rescue => e
69-
@logger_context.log_warn("tcp output exception: socket write failed", e, :socket => @socket&.to_s)
78+
@logger_context.log_warn("tcp output exception: socket write failed", e, :socket => @peer_info)
7079
break
7180
end
7281
end

0 commit comments

Comments
 (0)