Hello! Some beta steam binaries are available for testing. They have several improvements meaningful to dedicated servers, mostly related to handling of server browser packets such as the A2S_INFO packet that has been discussed.
If you do not set any environment variables, the new binaries have the following change: * Improved challenge generation. (Challenges are generated using siphash, so there is no table to search or fill up.) There are also some environment variables that can be set to active new features and behaviour: * STEAM_GAMESERVER_A2S_INFO_REQUIRE_CHALLENGE=1. This will opt into the new behavior we have been discussing for A2S_INFO packets. It is primarily intended for testing 3rd party query clients. It is *not* currently compatible with the main steam client, so it should not enabled be otherwise! It is compatible with the current steam beta client. * STEAM_GAMESERVER_RATE_LIMIT_200MS=N. This will drop any connectionless packets (A2S_INFO, A2S_RULES, A2S_PLAYERS) from a given IP after more than N are received in a 200ms window. By default, this rate limiting is disabled, but a reasonable value might be somewhere around 25-75 range. * STEAM_GAMESERVER_PACKET_HANDLER_NO_IPC. If this variable is set, then the Steamworks packet handling calls will use a "fast path". The design of the Steamworks SDK did not have dedicated servers in mind, and most API calls are serialized over an IPC, and in fact execute in the steam client process. A dedicated server does not communicate with a steam client (there usually isn't one running), but to keep the code simple, the same basic design is used - there are two threads, and all API calls are serialized and executed in the Steam thread. This common architecture makes all access to the steam related data structures essentially single-threaded, vastly simplifying the code. But it adds some overhead for calls, and for the packet handling in particular that overhead can be significant. Turning on the environment variable will bypass this serialization and context switch, which makes these calls, much, much faster. Note that this only affects a server in "shared socket mode" - meaning the game port and the query port are the same. You can download the appropriate binaries here: http://media.steampowered.com/apps/steamworks/steam_bins_6243860.zip If you have an opportunity to try out these changes, please let me know if you are able to tell any differences, or run into any problems. If this testing goes well and does not uncover any issues, we will probably change the defaults to enable the IPC bypass and enable some rate limiting at a conservative rate. NOTE: CSGO servers sometimes process A2S_INFO in the engine, based on the values of host_info_show, host_players_show, and host_rules_show. The corresponding packets will use go through these steamclient binaries, if host_info_show=2, host_players_show=2, or host_rules_show is true, respectively. _______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: https://list.valvesoftware.com/