module Rex::Socket::TcpServer

This class provides methods for interacting with a TCP server. It implements the Rex::IO::StreamServer interface.

Public Class Methods

create(hash = {}) click to toggle source

Creates the server using the supplied hash.

# File lib/rex/socket/tcp_server.rb, line 25
def self.create(hash = {})
  hash['Proto'] = 'tcp'
  hash['Server'] = true
  self.create_param(Rex::Socket::Parameters.from_hash(hash))
end
create_param(param) click to toggle source

Wrapper around the base class' creation method that automatically sets the parameter's protocol to TCP and sets the server flag to true.

# File lib/rex/socket/tcp_server.rb, line 35
def self.create_param(param)
  param.proto  = 'tcp'
  param.server = true
  Rex::Socket.create_param(param)
end

Public Instance Methods

accept(opts = {}) click to toggle source

Accepts a child connection.

Calls superclass method
# File lib/rex/socket/tcp_server.rb, line 44
def accept(opts = {})
  t = super()

  # jRuby compatibility
  if t.respond_to?('[]')
    t = t[0]
  end

  if (t)
    t.extend(Rex::Socket::Tcp)
    t.context = self.context

    pn = t.getpeername

    # We hit a "getpeername(2)" from Ruby
    return nil unless pn

    t.peerhost = pn[1]
    t.peerport = pn[2]
  end

  t
end