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:

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:

Reply via email to