Class: DNS::Server::Dispatcher::ConnectionDispatcher
- Inherits:
-
Object
- Object
- DNS::Server::Dispatcher::ConnectionDispatcher
- Defined in:
- lib/faildns/server/dispatcher/socket.rb,
lib/faildns/server/dispatcher/connectiondispatcher.rb
Defined Under Namespace
Classes: Socket
Instance Attribute Summary collapse
-
#dispatcher ⇒ Object
readonly
Returns the value of attribute dispatcher.
-
#listening ⇒ Object
readonly
Returns the value of attribute listening.
-
#server ⇒ Object
readonly
Returns the value of attribute server.
Instance Method Summary collapse
- #handle(string, socket) ⇒ Object
-
#initialize(dispatcher) ⇒ ConnectionDispatcher
constructor
A new instance of ConnectionDispatcher.
- #read ⇒ Object
- #start ⇒ Object
Constructor Details
#initialize(dispatcher) ⇒ ConnectionDispatcher
35 36 37 38 39 40 41 42 43 |
# File 'lib/faildns/server/dispatcher/connectiondispatcher.rb', line 35 def initialize (dispatcher) @server = dispatcher.server @dispatcher = dispatcher @host = @server.[:host] || '0.0.0.0' @port = @server.[:port] || 53 @sockets = [] end |
Instance Attribute Details
#dispatcher ⇒ Object (readonly)
Returns the value of attribute dispatcher.
33 34 35 |
# File 'lib/faildns/server/dispatcher/connectiondispatcher.rb', line 33 def dispatcher @dispatcher end |
#listening ⇒ Object (readonly)
Returns the value of attribute listening.
33 34 35 |
# File 'lib/faildns/server/dispatcher/connectiondispatcher.rb', line 33 def listening @listening end |
#server ⇒ Object (readonly)
Returns the value of attribute server.
33 34 35 |
# File 'lib/faildns/server/dispatcher/connectiondispatcher.rb', line 33 def server @server end |
Instance Method Details
#handle(string, socket) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/faildns/server/dispatcher/connectiondispatcher.rb', line 76 def handle (string, socket) DNS.debug "#{socket.inspect}: #{string.inspect}", { :level => 9 } Thread.new(string) {|input| begin @dispatcher.dispatch :input, Socket.new(@dispatcher, socket), Message.parse(string) rescue Exception => e DNS.debug e end } end |
#read ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/faildns/server/dispatcher/connectiondispatcher.rb', line 54 def read reading, = IO::select @sockets.concat([@listening[:UDP], @listening[:TCP]]) if !reading return end reading.each {|socket| if socket.is_a? TCPServer @sockets.push @listening[:TCP].accept_nonblock elsif socket.is_a? TCPSocket self.handle socket.recv_nonblock(65535), socket @sockets.delete(socket) else begin self.handle *@listening[:UDP].recvfrom_nonblock(512) rescue Errno::EAGAIN end end } end |
#start ⇒ Object
45 46 47 48 49 50 51 52 |
# File 'lib/faildns/server/dispatcher/connectiondispatcher.rb', line 45 def start @listening = { :TCP => TCPServer.new(@host, @port), :UDP => UDPSocket.new } @listening[:UDP].bind(@host, @port) end |