Fix: SteamCMD 'Timeout downloading' Errors

September 24, 2025 Daemon666 8 min read 259 vistas

You run SteamCMD to install the CS 1.6 dedicated server (app 90) and it stalls with Timeout downloading. Retrying..., loops forever, or bails with Error! App '90' state is 0x606 after update job. SteamCMD is generally reliable, so a persistent timeout is nearly always one of a few specific things: a flaky CDN edge, the notorious app 90 legacy-depot behaviour, or a platform/architecture mismatch. Here is how to get it to finish.

1. Just retry — it is often a bad CDN edge

The first and dullest fix works more often than it should. Timeout downloading frequently means Steam handed you a slow or dead content-server edge. Simply re-run the exact same command; SteamCMD resumes from where it stopped and usually gets a different, healthy edge:

./steamcmd.sh +force_install_dir ./hlds +login anonymous +app_update 90 validate +quit

If it times out again, run it a few more times — each retry resumes progress rather than restarting. Many "broken" installs finish on the third attempt with zero config changes.

2. Handle the app 90 legacy-depot trap

CS 1.6's app 90 is old and pulls legacy depots that behave badly with a single app_update 90. The classic symptom is it downloading, timing out, and re-downloading the base HLDS depot in a loop, never reaching the Counter-Strike content. The reliable workaround is to install the base first, then the mod depots, running the update repeatedly until the state settles:

./steamcmd.sh +force_install_dir ./hlds +login anonymous +app_update 90 +quit
# run it again; app 90 often needs several passes to fully settle
./steamcmd.sh +force_install_dir ./hlds +login anonymous +app_update 90 validate +quit

Do not add validate on the very first pass if it keeps looping — validate forces a re-check that can restart the loop. Get a clean pass first, then validate once at the end.

3. Force the platform type

On a 64-bit Linux box SteamCMD sometimes fetches the wrong platform depot and stalls. Pin it to the platform the CS 1.6 server actually needs:

./steamcmd.sh +@sSteamCmdForcePlatformType linux +force_install_dir ./hlds +login anonymous +app_update 90 validate +quit

You can substitute windows if you are deliberately pulling the Windows binaries under Wine. Setting the platform explicitly stops SteamCMD guessing and re-fetching the wrong depot, which is a frequent cause of an install that downloads a large amount and then loops back to the start without ever completing.

4. Fix the environment causing timeouts

If retries never help, the timeout is your side, not Steam's:

  • 32-bit libraries missing — SteamCMD is 32-bit. On a 64-bit host without lib32gcc/lib32stdc++ it can fail oddly during download. Install the i386 libs for your distro.
  • Disk full — a partition running out of space mid-download reads as a timeout/loop. Check df -h.
  • Firewall/proxy — a restrictive outbound firewall throttling Steam CDN traffic causes exactly this stall. Confirm the box has clean outbound HTTP to Steam content servers.
  • Ancient SteamCMD — a stale binary can loop. Delete the SteamCMD directory and re-extract a fresh copy, letting it self-update on first run.

5. Point it at a fresh install dir

A partially-corrupted download directory can make every subsequent run time out trying to reconcile broken state. Move the old directory aside and let SteamCMD build a clean one:

mv hlds hlds.broken
./steamcmd.sh +force_install_dir ./hlds +login anonymous +app_update 90 validate +quit

A clean directory removes any half-written depot metadata that was confusing the updater.

Troubleshooting

  • Timeout downloading. Retrying loops forever — bad CDN edge or app 90 legacy behaviour. Re-run several times; run without validate first, then validate once at the end.
  • Error! App '90' state is 0x606 — the update did not complete. Re-run app_update 90 until it reports up to date, then validate.
  • Fails immediately, not a timeout — missing 32-bit libs or a stale SteamCMD binary. Install i386 libs and re-extract SteamCMD.
  • Downloads then loops re-downloading the base depot — the classic app 90 trap. Run multiple passes; do not validate until it settles.
  • Stalls at the same percentage every time — disk full or a proxy cutting the connection. Check df -h and outbound connectivity.

Verification

A finished install prints Success! App '90' fully installed and drops the server files into your install dir. Confirm the launch binary and cstrike/ exist, then start the server once to prove the content is complete:

./hlds_run -game cstrike +map de_dust2 +maxplayers 12

If it reaches a running console and loads the map, the download completed cleanly. From here, layer your server.cfg and content on a known-good base rather than fighting a half-installed one.

Colaboradores: Daemon666 ✦
Compartir: