Module: Pixelflut::Sender

Defined in:
lib/pixelflut/sender.rb

Class Method Summary collapse

Class Method Details

.address(host, port) ⇒ Object



7
8
9
# File 'lib/pixelflut/sender.rb', line 7

def self.address(host, port)
  Addrinfo.tcp(host, port)
end

.create_socket(address) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/pixelflut/sender.rb', line 17

def self.create_socket(address)
  Socket
    .new(address.ipv6? ? :INET6 : :INET, :STREAM)
    .tap do |socket|
      socket.sync = true
      socket.setsockopt(:TCP, :NODELAY, 0)
      socket.setsockopt(:SOCKET, :KEEPALIVE, 0)
      socket.do_not_reverse_lookup = true
      socket.connect(
        Socket.pack_sockaddr_in(address.ip_port, address.ip_address)
      )
    end
end

.send(address, data) {|socket| ... } ⇒ Object

Yields:

  • (socket)


11
12
13
14
15
# File 'lib/pixelflut/sender.rb', line 11

def self.send(address, data)
  socket = create_socket(address)
  yield(socket) if block_given?
  loop { socket.write(data) }
end