Skip to content

Conversation

@tpill90
Copy link
Contributor

@tpill90 tpill90 commented Sep 1, 2024

After Valve's maintenance on 2024/08/27 some servers in affected regions will no longer accept TCP connections, which can prevent clients from ever making a successful connection in some cases.

For example CellId 63 (Washington DC) will endlessly retry the same servers without ever making a successful connection. I have tested and confirmed that other regions are affected by this issue, however I don't remember which ones off the top of my head.
image

…enance on 2024/08/27 some servers in affected regions will no longer accept TCP connections, which can prevent clients from ever making a successful connection in some cases. WebSockets appear to be the preferred protocol, so that should now be the new default.
@yaakov-h
Copy link
Member

yaakov-h commented Sep 2, 2024

That also suggests a secondary bug in the server selection logic, if we can't connect to one server we should be trying again on another.

@tpill90
Copy link
Contributor Author

tpill90 commented Sep 2, 2024

That also suggests a secondary bug in the server selection logic, if we can't connect to one server we should be trying again on another.

The retry logic is definitely working as intended, I can see that the servers are being iterated over as they fail. Part of the issue here might be due to GetCMList almost always returning servers in the exact same order, such that each time the client tries to connect it will have to traverse the list of always failing connections each time to eventually land on the remaining few good servers.

Taking a look at the logs from my Steam client it doesn't seem like the TCP servers are even considered, it just goes ahead and picks WebSockets :

[2024-09-02 00:29:28] GetCMListForConnect -- got 4 Netfilter CMs and 76 WebSocket CMs
[2024-09-02 00:29:28] GetCMListForConnect -- DC 'iad1' count: 23
[2024-09-02 00:29:28] GetCMListForConnect -- DC 'atl3' count: 21
[2024-09-02 00:29:28] GetCMListForConnect -- DC 'ord1' count: 21
[2024-09-02 00:29:28] GetCMListForConnect -- DC 'sea1' count: 15
[2024-09-02 00:29:28] [Connecting, 4, 0] [U:1:9680370] CM Directory list says 95% of connections should be websockets, we rolled 58 - using WebSockets as default.
[2024-09-02 00:29:28] [Connecting, 4, 0] [U:1:9680370] PingWebSocketCM() (ext4-iad1.steamserver.net:27036) starting...
[2024-09-02 00:29:28] [Connecting, 4, 0] [U:1:9680370] PingWebSocketCM() (cmp1-iad1.steamserver.net:443) starting...
[2024-09-02 00:29:28] [Connecting, 4, 0] [U:1:9680370] PingWebSocketCM() (ext3-iad1.steamserver.net:27023) starting...
[2024-09-02 00:29:28] [Connecting, 4, 0] [U:1:9680370] PingWebSocketCM() (ext2-atl3.steamserver.net:443) starting...
[2024-09-02 00:29:29] [Connecting, 4, 0] [U:1:9680370] PingWebSocketCM() (ext4-iad1.steamserver.net:27036) results: 87.7416ms + load 29.0000
[2024-09-02 00:29:29] [Connecting, 4, 0] [U:1:9680370] PingWebSocketCM() stopping after 400.00ms timeout and using good enough host (ext4-iad1.steamserver.net:27036)
[2024-09-02 00:29:29] [Connecting, 4, 0] [U:1:9680370] PingWebSocketCM() (ext3-iad1.steamserver.net:27023) results: 87.9958ms + load 32.0000
[2024-09-02 00:29:29] [Connecting, 4, 0] [U:1:9680370] PingWebSocketCM() (cmp1-iad1.steamserver.net:443) results: 128.5093ms + load 31.0000
[2024-09-02 00:29:29] [Connecting, 4, 0] [U:1:9680370] PingWebSocketCM() (ext2-atl3.steamserver.net:443) results: 124.1386ms + load 39.0000
[2024-09-02 00:29:29] [Connecting, 4, 7] [U:1:9680370] Connect() starting connection (eNetQOSLevelHigh, ext4-iad1.steamserver.net:27036, WebSocket)
[2024-09-02 00:29:29] [Connecting, 4, 7] [U:1:9680370] ConnectionCompleted() (162.254.192.87:27036, WebSocket) local address (192.168.1.55:54600)

Is Valve trying to decommission their TCP servers and move over to WebSockets exclusively? It would make sense that after server maintenance that some servers might no longer be accepting new TCP connections.

@xPaw xPaw added this to the 3.0.0 milestone Sep 2, 2024
@xPaw
Copy link
Member

xPaw commented Sep 2, 2024

I thought the default was All instead of force TCP.

@xPaw xPaw merged commit 27917f9 into SteamRE:master Sep 2, 2024
@yaakov-h
Copy link
Member

yaakov-h commented Sep 2, 2024

SteamClient has defaulted to TCP as far back as I remember and as far back as I can find code for, but I thought we changed that more recently. I suppose not.

And yes, I do believe that the long term plan is to migrate all of Steam over to WebSockets and dump the TCP and UDP implementations.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants