Sha256: 5e409fcbfa181cedd7e75355f7a354179a2dd393e953097ee4088d818533eded

Contents?: true

Size: 808 Bytes

Versions: 1

Compression:

Stored size: 808 Bytes

Contents

module GELF
  # Plain Ruby UDP sender.
  class RubyUdpSender
    def initialize(addrs)
      @mutex = ::Mutex.new
      @socket = UDPSocket.open
      @socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, 65507)  # 65535 - 20 (ip header) - 8 (udp header)
      self.addresses = addrs
    end

    def addresses
      @mutex.synchronize do
        @i = 0
        @addresses
      end
    end

    def addresses=(addrs)
      @mutex.synchronize do
        @i = 0
        @addresses = addrs
      end
    end

    def send_datagrams(datagrams)
      # not thread-safe, but we don't care if round-robin algo fails sometimes
      host, port = @addresses[@i]
      @i = (@i + 1) % @addresses.length

      datagrams.each do |datagram|
        @socket.send(datagram, 0, host, port)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gelf-1.4.0.beta1 lib/gelf/ruby_sender.rb