# 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:       sleep 0.1 until @server.status == :Running
49:     end
50:   end