536: def EventMachine::start_server server, port=nil, handler=nil, *args, &block
537:
538: begin
539: port = Integer(port)
540: rescue ArgumentError, TypeError
541:
542:
543: args.unshift handler if handler
544: handler = port
545: port = nil
546: end if port
547:
548: klass = if (handler and handler.is_a?(Class))
549: raise ArgumentError, 'must provide module or subclass of EventMachine::Connection' unless Connection > handler
550: handler
551: else
552: Class.new( Connection ) {handler and include handler}
553: end
554:
555: arity = klass.instance_method(:initialize).arity
556: expected = arity >= 0 ? arity : -(arity + 1)
557: if (arity >= 0 and args.size != expected) or (arity < 0 and args.size < expected)
558: raise ArgumentError, "wrong number of arguments for #{klass}#initialize (#{args.size} for #{expected})"
559: end
560:
561: s = if port
562: start_tcp_server server, port
563: else
564: start_unix_server server
565: end
566: @acceptors[s] = [klass,args,block]
567: s
568: end