code: def close(self, reason=None, within=0):
          
          if self.closed:
              return
  
          if reason is None:
              reason = ConnectionDone()
  
          if within > 0:
              channel0 = yield self.channel(0)
              deferred = channel0.connection_close()
              call = self.clock.callLater(within, deferred.cancel)
              try:
                  yield deferred
              except defer.CancelledError:
                  pass
              else:
                  call.cancel()
  
          self.do_close(reason)
docs: Explicitely close the connection.
  
          @param reason: Optional closing reason. If not given, ConnectionDone
              will be used.
          @param within: Shutdown the client within this amount of seconds. If
              zero (the default), all channels and queues will be closed
              immediately. If greater than 0, try to close the AMQP connection
              cleanly, by sending a "close" method and waiting for "close-ok". If
              no reply is received within the given amount of seconds, the
              transport will be forcely shutdown.