# File lib/eventmachine.rb, line 759
759:   def  EventMachine::attach io, handler=nil, *args
760:     klass = if (handler and handler.is_a?(Class))
761:       raise ArgumentError, 'must provide module or subclass of EventMachine::Connection' unless Connection > handler
762:       handler
763:     else
764:       Class.new( Connection ) {handler and include handler}
765:     end
766: 
767:     arity = klass.instance_method(:initialize).arity
768:     expected = arity >= 0 ? arity : -(arity + 1)
769:     if (arity >= 0 and args.size != expected) or (arity < 0 and args.size < expected)
770:       raise ArgumentError, "wrong number of arguments for #{klass}#initialize (#{args.size} for #{expected})"
771:     end
772: 
773:     readmode  = klass.public_instance_methods.any?{|m| m.to_sym == :notify_readable }
774:     writemode = klass.public_instance_methods.any?{|m| m.to_sym == :notify_writable }
775: 
776:     s = attach_fd io.respond_to?(:fileno) ? io.fileno : io, readmode, writemode
777: 
778:     c = klass.new s, *args
779:     @conns[s] = c
780:     block_given? and yield c
781:     c
782:   end