This question was created in reference to: [Steam dedicated server api not working/missing Steam DLL’s in dedicated server [Content removed]
Hi,
We are attempting to upgrade our project from 5.6.0 to 5.7.1, however after upgrading the engine our dedicated server no longer works. We had a similar issue when moving from 5.4.4 to 5.6.0 that was fixed in the referenced thread, however, applying the fixes that worked for us in 5.6.0 do not resolve it in 5.7.1.
When we attempt to start up our server we are met with the following errors and warnings. These stop the server from starting up correctly and stop clients from joining and playing the game. We are using the same working DefaultEngine.ini file that uses SteamSockets and have applied the fix shelved at CL:44788599 but these still seem to cause the same issues:
[Image Removed]
[Image Removed]
We are aware of the issue outlined on the bug tracker that the “SteamNetDriver” and “SteamNetConnection” classed have been moved from the “OnlineSubsystemSteam” module to the “SocketSubsystemSteamIP” module (https://issues.unrealengine.com/issue/UE-297279) which we applied fixes for based on the referenced thread.
Any help with this issue would be greatly appreciated and I will provide a repro project for this issue, as well as a full log file and the games DefaultEngine.ini files. If any additional info is required please let me know!
Steps to Reproduce
To reproduce the issue, you can download the provided repro and add it to a 5.7.1 source version of the engine. Then package the project using the server target and add the steam_appid.txt file to the binaries folder containing the server executable. When starting up the server the issues outlined in this thread will occur and the server will not start correctly or be visible to clients to join. You can also apply the shelved fix from the reference thread that can be found at CL:44788599, however the same issues will still occur.
Note: I have removed our Steam App ID from the test project and the linked .ini files, and replaced it with the default Steam App ID of 480.
This issue has been reported earlier and resolved in CL 48152108. Let me know if you don’t have access to our Perforce and I can provide the fix in text.
After testing with that CL in the project I still appear to get the error, it now outputs: LogSteamShared: Warning: Steam Dedicated Server API failed to initialize: No STEAMUGC_INTERFACE_VERSION020. I’ll attach the full log to this message.
Steam doesn’t well document these error messages but based on the text this leads me to believe ther’s a mismatch between the SDK you’re linking to and the actual DLL thats ran (It’s saying that version 20 was not found, implying it only goes up to 19 or below). Can you confirm that the steam DLL being packaged with the server is indeed the Steam 1.61 DLL?
I believe the project was previously using 1.57 in 5.6.0, I haven’t changed any of that post upgrade so it may still be using that version! I’ll have a check tomorrow and let you know, do you have a link to the documentation around changing this/confirming it is running on the correct version?
I’m not sure the best way to confirm it but the file size for 1.57 is 289kb for the steam_api64.dll and for 1.61 it is 313kb. The logic is all controlled by Engine/Source/ThirdParty/Steamworks/Steamworks.Build.cs, you can also try changing the version number in that file to 1.57 which will recompile your server against the 1.57 headers (although the engine has been updated to 1.61 so we cannot guarantee backwards compatibility)
After checking this morning the project is deifnitely being packaged with 1.61; the Steamworks.Build.cs file points to 1.61 and, in the server build, I can see it is using 1.61 and the steam_api64.dll is the same size as you mentioned above, I’ve attached an image of the Steamworks folder in the server build. Therefore it appears to be a different issue.
[Image Removed]
We did re-add the required DLL files (as oultined in this documentation: https://dev.epicgames.com/documentation/en-us/unreal-engine/online-subsystem-steam-interface-in-unreal-engine), however, this made no difference so I’m assuming the files we previously added were correct. I also attempted to revert the project back to 1.57 by changing the Steamworks.Build.cs to target that version, and adding the correct DLL files, but this did not work as 5.7 would not compile as it depends on 1.61 functionality.
Hope you had a great break as well, sorry as I left for break when you left your last response.
Last thing to guarantee it isn’t a version issue with Steam, can you confirm that in SteamSharedModule.cpp 's function GetSteamModulePath that STEAM_SDK_VER_PATH is properly pointing to Steamv161?
I’ve checked the steam shared module and it is using the STEAM_SDK_VER_PATH, which I’m guessing is the one defined in Steamworks.build.cs and that I can confirm is pointing to 1.61. I’ll attach a screenshot of this for you to confirm I am checking the correct thing but this is the only definition of STEAM_SDK_VER_PATH I can find in the source files:
As long as you’ve built the server in your current workspace, you should be able to see the generated defines in a file like this Engine\Plugins\Runtime\Steam\SteamShared\Intermediate\Build\Win64\x64\UnrealEditorGPF\Development\SteamShared\Definitions.SteamShared.h
If you can’t find it, then maybe adding something that debug prints the SteamShared info and/or deleting the other Steam SDKs from your local dir and confirming the behaviour is still the same.
I just want to be 100% sure that you are absolutely loading the 161 SDK because else there isn’t really any a great error reason as we don’t have that level of config in the engine for Steam.
I’ve navigated to that path provided and this is the document, from what I can see it looks to be targets Steam v161 with #define STEAM_SDK_VER TEXT(“1.61”) and #define STEAM_SDK_VER_PATH TEXT(“Steamv161”)! I’ll attach the full .h file to this reply too for you!
Unfortunately the overwhelming consensus is that there’s an issue with the binaries. “No STEAMUGC_INTERFACE_VERSION020” comes from Engine\Source\ThirdParty\Steamworks\Steamv161\sdk\public\steam\isteamugc.h where it defines STEAMUGC_INTERFACE_VERSION as 020 (v157 has this set to v17), the intent being that a future Steam dll will be able to load the exact same interface as previously compiled with to ensure backwards compatibility. The Steam v1.61 DLL should absolutely without a doubt contain a UGC interface version of v20 as that is specified in the Steam public headers.
My recommendation for possible investigation/solutions:
3) Uninstall and reinstall Steam on the target PC/server
4) Try a new UE project Steam build and see if that encounters the same error.
At this point since I don’t have access to Steam internals I will have to recommend you reach out to Valve for further support. I wish we could assist further but at this time we do not have reports of this error from other licensees nor can we reproduce internally.
Thanks for looking further into this for me. I’ll try those steps below as well as downloading a fresh version of the engine from source and making sure that is all good. I’ll let you know my findings anyway but like you said I may need to reach out to valve!
I’ve given everything mentioned above a try and also completely redownloaded the release branch from git and used that and I still get the same issues, so I’ll have a chat with the team next week and see whether we want to chase this up with Valve.
Can you go into FWindowsEOSSDKManager::Initialize and comment out all the code that isnt Super::Initialize()? I’m digging through other community posts and I see one with a similar problem you have and that was their stated solution. Let me know if that works for you.