internal async Task<IAsyncTransport> ConnectAsync(Address address, Action<ClientWebSocketOptions> options) { Uri uri = new UriBuilder() { Scheme = address.Scheme, Port = GetDefaultPort(address.Scheme, address.Port), Host = address.Host, Path = address.Path }.Uri; ClientWebSocket cws = new ClientWebSocket(); cws.Options.AddSubProtocol(WebSocketSubProtocol); if (options != null) { options(cws.Options); } await cws.ConnectAsync(uri, CancellationToken.None); if (cws.SubProtocol != WebSocketSubProtocol) { cws.Abort(); throw new NotSupportedException( string.Format( CultureInfo.InvariantCulture, "WebSocket SubProtocol used by the host is not the same that was requested: {0}", cws.SubProtocol ?? "<null>")); } this.webSocket = cws; return this; }