class Diameter::Internals::TCPStackHelper

@private

Public Instance Methods

accept_loop() click to toggle source
# File lib/diameter/stack_transport_helpers.rb, line 136
def accept_loop
  rs, _ws, es = IO.select(@listen_connections, [], @listen_connections)
  es.each do |e|
    # :nocov:
    Diameter.logger.log(Logger::WARN, "Exception on connection #{e}")
    # :nocov:
  end

  rs.each do |r|
    sock, addr = r.accept
    Diameter.logger.debug("Accepting connection from #{addr}")
    @data[sock] = ''
    @all_connections.push sock 
    wakeup
  end
end
close(connection) click to toggle source
# File lib/diameter/stack_transport_helpers.rb, line 112
def close(connection)
  connection.close
  @all_connections.delete connection
  @listen_connections.delete connection
  @data.delete connection
rescue IOError
  # It's OK if this is already closed
end
setup_new_connection(host, port) click to toggle source
# File lib/diameter/stack_transport_helpers.rb, line 93
def setup_new_connection(host, port)
  sd = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
  sd.connect(Socket.pack_sockaddr_in(port, host))
  @all_connections.push sd
  @data[sd] = ''
  wakeup
  sd
end
setup_new_listen_connection(host, port) click to toggle source
# File lib/diameter/stack_transport_helpers.rb, line 121
def setup_new_listen_connection(host, port)
  sd = ServerSocket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
  # reuse = [1,0].pack('ii')
  sd.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true)
  sd.bind(Socket.pack_sockaddr_in(port, host))
  sd.listen(100)
  @listen_connections.push sd
  @accept_loop_thread = Thread.new do
    loop do
      accept_loop
    end
  end
  @accept_loop_thread.abort_on_exception = true
end
shutdown() click to toggle source
# File lib/diameter/stack_transport_helpers.rb, line 102
def shutdown
  @accept_loop_thread.kill if @accept_loop_thread
  @loop_thread.kill if @loop_thread

  @all_connections.each { |c| close(c) }
  @listen_connections.each { |c| close(c) }
  @all_connections = []
  @listen_connections = []
end