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