August 30, 2026 · Troubleshooting · About 8 minutes

Shadowrocket Connection Timeout: 3 Steps to Troubleshoot Connection Failures

Troubleshoot Shadowrocket connection timeouts with three steps: test latency, check protocol settings, and verify your device’s date and time. Find out whether the issue is with your settings or the server.

At a glance

If Shadowrocket times out, first check how you’re testing and which network you’re using. Then review your existing connection details and check your device’s time and certificate validity. This guide is for users who already have connection details from their provider but can’t connect. Follow the steps in order to narrow the issue down to network reachability, protocol settings, or TLS validation—without changing several settings at once.

Before you troubleshoot: distinguish test timeouts from failed requests

A latency test timeout means only that the test did not receive the expected response within the allotted time. It does not, by itself, mean the server is offline. Different tests check different parts of the connection: a TCP test mainly checks whether a port can be reached, while an application-level connectivity test may also involve a protocol handshake, TLS, and the test destination. Note which test you’re using before comparing results.

Likewise, a VPN status of Connected means the tunnel is established; it doesn’t confirm that remote authentication, DNS resolution, or requests to websites are working. Trace the request through each stage to narrow down the issue instead of assuming everything is working because the connection switch is on.

App request System tunnel Rule matching Protocol handshake Destination response

Step 1: Keep the node and test method fixed, then compare networks

In Home, confirm which node is selected. Don’t update all your connection details or switch protocols yet. Use the same node and test method on your current network, repeat the test, and record the results. An intermittent failure calls for a different approach than a persistent one. Repeating the test helps confirm whether the issue is reproducible; a single latency reading isn’t a measure of connection quality.

  1. Confirm what you’re testing

    Open Home and note the selected node’s name, server address, port, and test method. Make sure it’s the node you intend to test so you don’t confuse its results with another node’s or with webpage access.

  2. Rule out routing rules

    Go to Home → Global Routing → Proxy and test a regular webpage using the selected node. This is only to temporarily rule out routing in Config. When you’re done, restore your original Global Routing selection.

  3. Try another network

    If supported by your device and permitted, switch from Wi-Fi to cellular, or try another trusted Wi-Fi network. Wait for the connection to stabilize, keep the node and settings unchanged, and run the same test again.

  4. Check automatic connections

    If the connection comes back automatically after you disconnect manually, go to Settings → On Demand and review the existing rules. To pause them, turn off On Demand before testing a manual connection. Restore your original settings when you’re done.

1
Keep the node fixed to avoid changing what you’re comparing
2
Available networks to test one at a time
3 steps
Latency test, settings check, and time verification

Takeaway: Keep evidence that helps distinguish network issues

If the same node consistently fails on one network but works on another, start by checking sign-in requirements, outbound restrictions, and the route to the server on the failing network. Don’t change the password or certificate settings first. If it fails on both networks, that narrows things down but doesn’t identify the cause; continue by checking the settings and server status.

For connections that rely on UDP, such as Hysteria2 and WireGuard, don’t use a TCP test to determine whether the protocol works. A network that allows TCP traffic may still block UDP traffic to the same address. Keep the protocol unchanged when comparing results, and base your assessment on actual connection and request results.

Step 2: Check the address, port, and authentication settings for your protocol

Go to Home → the selected node’s edit screen, and check each field against the original details from your provider. Don’t guess the protocol from the node name or copy settings from another connection. The port must match the one the server listens on: if the details say 8443, don’t change it to 443 just because TLS is enabled. These numbers illustrate what to check; they aren’t universal settings.

First check that the server address doesn’t include an accidental space, protocol prefix, or path. Then check the port and authentication fields. The server address, TLS Server Name, and WebSocket Host may serve different purposes. Use the same value for them only if your provider’s details explicitly say to.

Protocol Check first Commonly overlooked differences
Shadowsocks Server address, port, Password, Method Both Method and Password must match; confirming that the port is reachable isn’t enough.
VMess / VLESS Server address, port, UUID, transport, and related settings For WebSocket, check Path and Host. Enter TLS and other security settings as provided.
Trojan Server address, port, Password, TLS Server Name A reachable address doesn’t guarantee that the certificate domain matches. Don’t change the Server Name arbitrarily.
Hysteria2 Server address, port, authentication details, and TLS settings Uses UDP. If obfuscation is enabled, its type and password must also match.
WireGuard Endpoint, keys, interface addresses, and route scope Uses UDP. A mismatched peer key can also prevent a successful handshake.

If you use a subscription, distinguish update failures from node failures

Updating a subscription retrieves connection details; connecting through a node uses those details to reach a remote server. These are separate processes. In Home, find your subscription group and update it, then check whether the node’s address, port, or authentication details have changed. A successful update doesn’t mean every node in it works. A failed update doesn’t necessarily mean your saved connection details are no longer valid.

Step 3: Correct your device’s time and check for TLS errors

TLS certificates have a validity period. If your device’s clock is significantly wrong, a valid certificate may appear not yet valid or expired. On your iPhone or iPad, open Settings → General → Date & Time. Check that Set Automatically is on and the displayed date and time are correct. If device management restricts this setting, contact your administrator.

After correcting the time, reconnect and test again. If the time is correct but the certificate error persists, check whether the Server Name matches the certificate domain, or ask your provider to check the server certificate and certificate chain. Don’t turn off certificate validation as a substitute for these checks. Correcting the time also can’t fix an expired server certificate.

Error: i/o timeout

Cause: An operation somewhere along the network read/write path didn’t complete in time. This message alone doesn’t identify which layer failed.

What to do: Check the destination address and handshake details around the error. First test the same node on another network, then verify the address, port, and protocol settings.

Error: connection refused

Cause: The destination or a device along the route explicitly rejected the connection. The port may have no service listening on it, or a rule may be blocking access.

What to do: Check the port provided by your provider and ask them to confirm the listener status and access policy. Simply increasing the timeout is unlikely to help.

Error: x509: certificate has expired or is not yet valid

Cause: Certificate validity checking failed. The device’s time may be incorrect, or there may be an issue with the server certificate itself.

What to do: Correct your device’s date and time first. If the error persists, share a redacted version of it with your provider for investigation.

These are examples of errors that may appear in logs, not fixed popup messages. The full message can vary depending on the protocol and connection stage. Keeping the surrounding error details is more useful than noting only “timeout,” but remove authentication details before sharing logs.

After the connection works again: check Config and routing

If webpages load temporarily in Proxy but only some fail after you restore Config, focus on the active configuration instead of changing a node you’ve already verified works. Open Config and check which configuration file is selected, then go to Home → Global Routing → Config and test again.

Rules are evaluated in order. DOMAIN-SUFFIX matches a domain and its subdomains, IP-CIDR matches an IP range, GEOIP matches based on the geographic location of an IP address, and FINAL catches requests that didn’t match an earlier rule. The example below demonstrates syntax and order only; it isn’t a complete configuration to replace yours with:

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT
GEOIP,CN,DIRECT
FINAL,DIRECT

Takeaway: Distinguish a failed node from a request taking the wrong route

If the same request works in Proxy but fails in Config, first record the matched rule and actual outbound route, then adjust the relevant configuration. A test can only tell you whether the node works if you confirm the request actually went through it.

Still failing? Collect reproducible details to share

If the connection still isn’t working after all three steps, give your provider reproducible details instead of just the node name. Test results can help narrow down the issue, but without server-side information they can’t prove whether the client or server is at fault. The details below are enough for the next round of checks; you don’t need to share full authentication credentials.

  1. Test time and network: Include your local time and time zone, and whether you were on Wi-Fi or cellular. Note whether the issue also occurs on another network.
  2. Protocol and test method: Name the protocol you’re using, such as Shadowsocks or Trojan, and say whether you ran a port test or tested a complete request.
  3. Client status: Note your Global Routing selection, the current node, whether the device time is correct, and whether you checked On Demand.
  4. Point of failure: Say whether the connection can’t be established, authentication fails, TLS validation fails, or only specific websites fail after connecting.
  5. Redacted evidence: Include the relevant error context. Remove subscription tokens, passwords, UUIDs, private keys, and any QR codes containing them.

Rebuying the app won’t fix a node timeout. A one-time app purchase is separate from a connection plan: Shadowrocket is a closed-source commercial app, and buying it on the App Store is separate from the connection service you have with your provider. Shadowrocket is available only on Apple platforms, primarily for iPhone and iPad. Check the App Store page for system requirements.

Download Shadowrocket