             }
         }
 
-        // 切断時
+        // エラー発生時
         ws.internalHandlers.onDisconnectWithError = { [weak self] ws, error in
             guard let weakSelf = self else {
                 return

        }
    }

    var webSocketChannel: URLSessionWebSocketChannel?
    var webSocketChannelCandidates: [URLSessionWebSocketChannel] = []

    private var onConnectHandler: ((Error?) -> Void)?

    private let queue: OperationQueue

    var connectedUrl: URL?


            // 最初に接続に成功した WebSocket 以外は無視する
            guard weakSelf.webSocketChannel == nil else {
                // TODO: ここでも候補から削除した方が良い?
                return
            }

            // 接続に成功した WebSocket を SignalingChannel に設定する
            Logger.info(type: .signalingChannel, message: "connected to \(String(describing: ws.host))")
            weakSelf.webSocketChannel = webSocketChannel
            weakSelf.connectedUrl = ws.url

            // 採用された WebSocket 以外を切断してから webSocketChannelCandidates を破棄する
            weakSelf.webSocketChannelCandidates.removeAll { $0 == webSocketChannel }
            weakSelf.webSocketChannelCandidates.forEach {
                Logger.debug(type: .signalingChannel, message: "closeing connection to \(String(describing: $0.host))")
                $0.disconnect(error: nil)
            }

            // 候補を破棄する
            weakSelf.webSocketChannelCandidates.removeAll()
            weakSelf.state = .connected

