make end() wait for queue to drain, add destroy() for immediate disconnection