ClientWebSocket.ConnectAsync() does not work on Mac  #90258

Description

@linkaiyu

Description

in a simple MAUI test app, call to ClientWebSocket.ConnectAsync() on Mac does not return.
some experimental work suggests that MAUI is defaulting to HttpNoProxy:
when we don’t set proxy to ClientWebSocket Option the MAUI ClientWebSocket is defaulting to NoProxy and the connect fails. I checked the values of HttpClient.DefaultProxy:
In MAUI app:

HttpClient.DefaultProxy{System.Net.Http.HttpNoProxy}

comparing that to .Net7 App, it's set to MacProxy:

HttpClient.DefaultProxy{System.Net.Http.MacProxy}

for reference:
https://github.com/dotnet/dotnet/blob/main/src/runtime/src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/WebSocketHandle.Managed.cs#L35

in customer situation, WPAD (Web Proxy Auto-Discovery) is used to configure internal laptops.
while testing on MS VPN, the code works. It's worth considering whether the MS VPN proxy setup differs from WPAD,

we need to get Proxy Url/object into MAUI app for all different VPN configuration and create WebProxy object and set it to ClientWebSocket.

Steps to Reproduce

download the repro to Mac connected via VPN with WPAD configured.
in the repro app, click on button to start test. the call to ClientWebSocket.ConnectAsync() will be stuck

Link to public reproduction project repository

https://github.com/linkaiyu/ClientWebSocket

Version with bug

7.0.49

Last version that worked well

Unknown/Other

Affected platforms

macOS

Affected platform versions

No response

Did you find any workaround?

short term workaround is to create a webproxy for the connection, but for long term when the app is going to be released to the public, the short term solution won't meet the needs

Relevant log output

No response

Metadata

Metadata

Assignees

Labels

area-System.Netin-prThere is an active PR which will close this issue when it is mergedos-maccatalystMacCatalyst OS

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
     blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    Skip to content

    ClientWebSocket.ConnectAsync() does not work on Mac  #90258

    Description

    @linkaiyu

    Description

    in a simple MAUI test app, call to ClientWebSocket.ConnectAsync() on Mac does not return.
    some experimental work suggests that MAUI is defaulting to HttpNoProxy:
    when we don’t set proxy to ClientWebSocket Option the MAUI ClientWebSocket is defaulting to NoProxy and the connect fails. I checked the values of HttpClient.DefaultProxy:
    In MAUI app:

    HttpClient.DefaultProxy{System.Net.Http.HttpNoProxy}

    comparing that to .Net7 App, it's set to MacProxy:

    HttpClient.DefaultProxy{System.Net.Http.MacProxy}

    for reference:
    https://github.com/dotnet/dotnet/blob/main/src/runtime/src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/WebSocketHandle.Managed.cs#L35

    in customer situation, WPAD (Web Proxy Auto-Discovery) is used to configure internal laptops.
    while testing on MS VPN, the code works. It's worth considering whether the MS VPN proxy setup differs from WPAD,

    we need to get Proxy Url/object into MAUI app for all different VPN configuration and create WebProxy object and set it to ClientWebSocket.

    Steps to Reproduce

    download the repro to Mac connected via VPN with WPAD configured.
    in the repro app, click on button to start test. the call to ClientWebSocket.ConnectAsync() will be stuck

    Link to public reproduction project repository

    https://github.com/linkaiyu/ClientWebSocket

    Version with bug

    7.0.49

    Last version that worked well

    Unknown/Other

    Affected platforms

    macOS

    Affected platform versions

    No response

    Did you find any workaround?

    short term workaround is to create a webproxy for the connection, but for long term when the app is going to be released to the public, the short term solution won't meet the needs

    Relevant log output

    No response

    Metadata

    Metadata

    Assignees

    Labels

    area-System.Netin-prThere is an active PR which will close this issue when it is mergedos-maccatalystMacCatalyst OS

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      Skip to content

      ClientWebSocket.ConnectAsync() does not work on Mac  #90258

      Description

      @linkaiyu

      Description

      in a simple MAUI test app, call to ClientWebSocket.ConnectAsync() on Mac does not return.
      some experimental work suggests that MAUI is defaulting to HttpNoProxy:
      when we don’t set proxy to ClientWebSocket Option the MAUI ClientWebSocket is defaulting to NoProxy and the connect fails. I checked the values of HttpClient.DefaultProxy:
      In MAUI app:

      HttpClient.DefaultProxy{System.Net.Http.HttpNoProxy}

      comparing that to .Net7 App, it's set to MacProxy:

      HttpClient.DefaultProxy{System.Net.Http.MacProxy}

      for reference:
      https://github.com/dotnet/dotnet/blob/main/src/runtime/src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/WebSocketHandle.Managed.cs#L35

      in customer situation, WPAD (Web Proxy Auto-Discovery) is used to configure internal laptops.
      while testing on MS VPN, the code works. It's worth considering whether the MS VPN proxy setup differs from WPAD,

      we need to get Proxy Url/object into MAUI app for all different VPN configuration and create WebProxy object and set it to ClientWebSocket.

      Steps to Reproduce

      download the repro to Mac connected via VPN with WPAD configured.
      in the repro app, click on button to start test. the call to ClientWebSocket.ConnectAsync() will be stuck

      Link to public reproduction project repository

      https://github.com/linkaiyu/ClientWebSocket

      Version with bug

      7.0.49

      Last version that worked well

      Unknown/Other

      Affected platforms

      macOS

      Affected platform versions

      No response

      Did you find any workaround?

      short term workaround is to create a webproxy for the connection, but for long term when the app is going to be released to the public, the short term solution won't meet the needs

      Relevant log output

      No response

      Metadata

      Metadata

      Assignees

      Labels

      area-System.Netin-prThere is an active PR which will close this issue when it is mergedos-maccatalystMacCatalyst OS

      Type

      No type

      Projects

      No projects

        Milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        Skip to content

        ClientWebSocket.ConnectAsync() does not work on Mac  #90258

        Description

        @linkaiyu

        Description

        in a simple MAUI test app, call to ClientWebSocket.ConnectAsync() on Mac does not return.
        some experimental work suggests that MAUI is defaulting to HttpNoProxy:
        when we don’t set proxy to ClientWebSocket Option the MAUI ClientWebSocket is defaulting to NoProxy and the connect fails. I checked the values of HttpClient.DefaultProxy:
        In MAUI app:

        HttpClient.DefaultProxy{System.Net.Http.HttpNoProxy}

        comparing that to .Net7 App, it's set to MacProxy:

        HttpClient.DefaultProxy{System.Net.Http.MacProxy}

        for reference:
        https://github.com/dotnet/dotnet/blob/main/src/runtime/src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/WebSocketHandle.Managed.cs#L35

        in customer situation, WPAD (Web Proxy Auto-Discovery) is used to configure internal laptops.
        while testing on MS VPN, the code works. It's worth considering whether the MS VPN proxy setup differs from WPAD,

        we need to get Proxy Url/object into MAUI app for all different VPN configuration and create WebProxy object and set it to ClientWebSocket.

        Steps to Reproduce

        download the repro to Mac connected via VPN with WPAD configured.
        in the repro app, click on button to start test. the call to ClientWebSocket.ConnectAsync() will be stuck

        Link to public reproduction project repository

        https://github.com/linkaiyu/ClientWebSocket

        Version with bug

        7.0.49

        Last version that worked well

        Unknown/Other

        Affected platforms

        macOS

        Affected platform versions

        No response

        Did you find any workaround?

        short term workaround is to create a webproxy for the connection, but for long term when the app is going to be released to the public, the short term solution won't meet the needs

        Relevant log output

        No response

        Metadata

        Metadata

        Assignees

        Labels

        area-System.Netin-prThere is an active PR which will close this issue when it is mergedos-maccatalystMacCatalyst OS

        Type

        No type

        Projects

        No projects

          Milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          Skip to content

          ClientWebSocket.ConnectAsync() does not work on Mac  #90258

          Description

          @linkaiyu

          Description

          in a simple MAUI test app, call to ClientWebSocket.ConnectAsync() on Mac does not return.
          some experimental work suggests that MAUI is defaulting to HttpNoProxy:
          when we don’t set proxy to ClientWebSocket Option the MAUI ClientWebSocket is defaulting to NoProxy and the connect fails. I checked the values of HttpClient.DefaultProxy:
          In MAUI app:

          HttpClient.DefaultProxy{System.Net.Http.HttpNoProxy}

          comparing that to .Net7 App, it's set to MacProxy:

          HttpClient.DefaultProxy{System.Net.Http.MacProxy}

          for reference:
          https://github.com/dotnet/dotnet/blob/main/src/runtime/src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/WebSocketHandle.Managed.cs#L35

          in customer situation, WPAD (Web Proxy Auto-Discovery) is used to configure internal laptops.
          while testing on MS VPN, the code works. It's worth considering whether the MS VPN proxy setup differs from WPAD,

          we need to get Proxy Url/object into MAUI app for all different VPN configuration and create WebProxy object and set it to ClientWebSocket.

          Steps to Reproduce

          download the repro to Mac connected via VPN with WPAD configured.
          in the repro app, click on button to start test. the call to ClientWebSocket.ConnectAsync() will be stuck

          Link to public reproduction project repository

          https://github.com/linkaiyu/ClientWebSocket

          Version with bug

          7.0.49

          Last version that worked well

          Unknown/Other

          Affected platforms

          macOS

          Affected platform versions

          No response

          Did you find any workaround?

          short term workaround is to create a webproxy for the connection, but for long term when the app is going to be released to the public, the short term solution won't meet the needs

          Relevant log output

          No response

          Metadata

          Metadata

          Assignees

          Labels

          area-System.Netin-prThere is an active PR which will close this issue when it is mergedos-maccatalystMacCatalyst OS

          Type

          No type

          Projects

          No projects

            Milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            Skip to content

            ClientWebSocket.ConnectAsync() does not work on Mac  #90258

            Description

            @linkaiyu

            Description

            in a simple MAUI test app, call to ClientWebSocket.ConnectAsync() on Mac does not return.
            some experimental work suggests that MAUI is defaulting to HttpNoProxy:
            when we don’t set proxy to ClientWebSocket Option the MAUI ClientWebSocket is defaulting to NoProxy and the connect fails. I checked the values of HttpClient.DefaultProxy:
            In MAUI app:

            HttpClient.DefaultProxy{System.Net.Http.HttpNoProxy}

            comparing that to .Net7 App, it's set to MacProxy:

            HttpClient.DefaultProxy{System.Net.Http.MacProxy}

            for reference:
            https://github.com/dotnet/dotnet/blob/main/src/runtime/src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/WebSocketHandle.Managed.cs#L35

            in customer situation, WPAD (Web Proxy Auto-Discovery) is used to configure internal laptops.
            while testing on MS VPN, the code works. It's worth considering whether the MS VPN proxy setup differs from WPAD,

            we need to get Proxy Url/object into MAUI app for all different VPN configuration and create WebProxy object and set it to ClientWebSocket.

            Steps to Reproduce

            download the repro to Mac connected via VPN with WPAD configured.
            in the repro app, click on button to start test. the call to ClientWebSocket.ConnectAsync() will be stuck

            Link to public reproduction project repository

            https://github.com/linkaiyu/ClientWebSocket

            Version with bug

            7.0.49

            Last version that worked well

            Unknown/Other

            Affected platforms

            macOS

            Affected platform versions

            No response

            Did you find any workaround?

            short term workaround is to create a webproxy for the connection, but for long term when the app is going to be released to the public, the short term solution won't meet the needs

            Relevant log output

            No response

            Metadata

            Metadata

            Assignees

            Labels

            area-System.Netin-prThere is an active PR which will close this issue when it is mergedos-maccatalystMacCatalyst OS

            Type

            No type

            Projects

            No projects

              Milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              ClientWebSocket.ConnectAsync() does not work on Mac  #90258

              Description

              @linkaiyu

              Description

              in a simple MAUI test app, call to ClientWebSocket.ConnectAsync() on Mac does not return.
              some experimental work suggests that MAUI is defaulting to HttpNoProxy:
              when we don’t set proxy to ClientWebSocket Option the MAUI ClientWebSocket is defaulting to NoProxy and the connect fails. I checked the values of HttpClient.DefaultProxy:
              In MAUI app:

              HttpClient.DefaultProxy{System.Net.Http.HttpNoProxy}

              comparing that to .Net7 App, it's set to MacProxy:

              HttpClient.DefaultProxy{System.Net.Http.MacProxy}

              for reference:
              https://github.com/dotnet/dotnet/blob/main/src/runtime/src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/WebSocketHandle.Managed.cs#L35

              in customer situation, WPAD (Web Proxy Auto-Discovery) is used to configure internal laptops.
              while testing on MS VPN, the code works. It's worth considering whether the MS VPN proxy setup differs from WPAD,

              we need to get Proxy Url/object into MAUI app for all different VPN configuration and create WebProxy object and set it to ClientWebSocket.

              Steps to Reproduce

              download the repro to Mac connected via VPN with WPAD configured.
              in the repro app, click on button to start test. the call to ClientWebSocket.ConnectAsync() will be stuck

              Link to public reproduction project repository

              https://github.com/linkaiyu/ClientWebSocket

              Version with bug

              7.0.49

              Last version that worked well

              Unknown/Other

              Affected platforms

              macOS

              Affected platform versions

              No response

              Did you find any workaround?

              short term workaround is to create a webproxy for the connection, but for long term when the app is going to be released to the public, the short term solution won't meet the needs

              Relevant log output

              No response

              Metadata

              Metadata

              Assignees

              Labels

              area-System.Netin-prThere is an active PR which will close this issue when it is mergedos-maccatalystMacCatalyst OS

              Type

              No type

              Projects

              No projects

                Milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                Skip to content

                ClientWebSocket.ConnectAsync() does not work on Mac  #90258

                Description

                @linkaiyu

                Description

                in a simple MAUI test app, call to ClientWebSocket.ConnectAsync() on Mac does not return.
                some experimental work suggests that MAUI is defaulting to HttpNoProxy:
                when we don’t set proxy to ClientWebSocket Option the MAUI ClientWebSocket is defaulting to NoProxy and the connect fails. I checked the values of HttpClient.DefaultProxy:
                In MAUI app:

                HttpClient.DefaultProxy{System.Net.Http.HttpNoProxy}

                comparing that to .Net7 App, it's set to MacProxy:

                HttpClient.DefaultProxy{System.Net.Http.MacProxy}

                for reference:
                https://github.com/dotnet/dotnet/blob/main/src/runtime/src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/WebSocketHandle.Managed.cs#L35

                in customer situation, WPAD (Web Proxy Auto-Discovery) is used to configure internal laptops.
                while testing on MS VPN, the code works. It's worth considering whether the MS VPN proxy setup differs from WPAD,

                we need to get Proxy Url/object into MAUI app for all different VPN configuration and create WebProxy object and set it to ClientWebSocket.

                Steps to Reproduce

                download the repro to Mac connected via VPN with WPAD configured.
                in the repro app, click on button to start test. the call to ClientWebSocket.ConnectAsync() will be stuck

                Link to public reproduction project repository

                https://github.com/linkaiyu/ClientWebSocket

                Version with bug

                7.0.49

                Last version that worked well

                Unknown/Other

                Affected platforms

                macOS

                Affected platform versions

                No response

                Did you find any workaround?

                short term workaround is to create a webproxy for the connection, but for long term when the app is going to be released to the public, the short term solution won't meet the needs

                Relevant log output

                No response

                Metadata

                Metadata

                Assignees

                Labels

                area-System.Netin-prThere is an active PR which will close this issue when it is mergedos-maccatalystMacCatalyst OS

                Type

                No type

                Projects

                No projects

                  Milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions