class Dizby::TCProtocol::Server

Attributes

port[R]

Public Class Methods

new(args, host, port) click to toggle source
Calls superclass method
# File lib/dizby/protocols/tcp.rb, line 57
def initialize(args, host, port)
  port ||= 0

  if host.empty?
    host = TCProtocol.getservername
    socket = self.class.open_socket_inaddr_any(host, port)
  else
    socket = TCPServer.open(host, port)
  end

  port = socket.addr[1] if port.zero?

  args.uri = "drb://#{host}:#{port}"
  super(args, socket)

  TCProtocol.apply_sockopt(socket)

  @port = port
end
open_socket_inaddr_any(host, port) click to toggle source
# File lib/dizby/protocols/tcp.rb, line 94
def self.open_socket_inaddr_any(host, port)
  infos = Socket.getaddrinfo(
    host, nil, Socket::AF_UNSPEC,
    Socket::SOCK_STREAM, 0, Socket::AI_PASSIVE
  )

  families = Hash[*infos.map { |af, *_| af }.uniq.zip([]).flatten]
  return TCPServer.open('0.0.0.0', port) if families.key?('AF_INET')
  return TCPServer.open('::', port) if families.key?('AF_INET6')
  TCPServer.open(port)
end

Public Instance Methods

accept() click to toggle source
Calls superclass method
# File lib/dizby/protocols/tcp.rb, line 79
def accept
  socket = nil
  loop do
    socket = super
    break if !tcp_acl || tcp_acl.allow_socket?(socket) # TODO: not tested
    socket.close
  end

  TCProtocol.apply_sockopt(socket)
  BasicConnection.new(self, socket)
end