# File lib/puppet/network/http/webrick.rb, line 21
21:     def listen(args = {})
22:         raise ArgumentError, ":protocols must be specified." if !args[:protocols] or args[:protocols].empty?
23:         raise ArgumentError, ":address must be specified." unless args[:address]
24:         raise ArgumentError, ":port must be specified." unless args[:port]
25: 
26:         @protocols = args[:protocols]
27:         @xmlrpc_handlers = args[:xmlrpc_handlers]
28: 
29:         arguments = {:BindAddress => args[:address], :Port => args[:port]}
30:         arguments.merge!(setup_logger)
31:         arguments.merge!(setup_ssl)
32: 
33:         @server = WEBrick::HTTPServer.new(arguments)
34:         @server.listeners.each { |l| l.start_immediately = false }
35: 
36:         setup_handlers
37: 
38:         @mutex.synchronize do
39:             raise "WEBrick server is already listening" if @listening
40:             @listening = true
41:             @thread = Thread.new {
42:                 @server.start { |sock|
43:                     raise "Client disconnected before connection could be established" unless IO.select([sock],nil,nil,0.1)
44:                     sock.accept
45:                     @server.run(sock)
46:                 }
47:            }
48:         end
49:     end