Method: Fluent::Plugin::SyslogInput#start_tcp_server

Defined in:
lib/fluent/plugin/in_syslog.rb

#start_tcp_server(tls: false) ⇒ Object



178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'lib/fluent/plugin/in_syslog.rb', line 178

def start_tcp_server(tls: false)
  octet_count_frame = @frame_type == :octet_count

  delimiter = octet_count_frame ? " " : @delimiter
  delimiter_size = delimiter.size
  server_create_connection(
    tls ? :in_syslog_tls_server : :in_syslog_tcp_server, @port,
    bind: @bind,
    resolve_name: @resolve_hostname,
    send_keepalive_packet: @send_keepalive_packet
  ) do |conn|
    conn.data do |data|
      buffer = conn.buffer
      buffer << data
      pos = 0
      if octet_count_frame
        while idx = buffer.index(delimiter, pos)
          num = Integer(buffer[pos..idx])
          msg = buffer[idx + delimiter_size, num]
          if msg.size != num
            break
          end

          pos = idx + delimiter_size + num
          message_handler(msg, conn)
        end
      else
        while idx = buffer.index(delimiter, pos)
          msg = buffer[pos...idx]
          pos = idx + delimiter_size
          message_handler(msg, conn)
        end
      end
      buffer.slice!(0, pos) if pos > 0
    end
  end
end