Fake IP not released after game exits

未关闭
#465 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 2 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
一周以上
新手友好度
12/100
Issue 类型
缺陷
描述清晰度
需要澄清
活跃度
活跃
技术栈
cpp, csharp
领域
networking

调研方向

The report describes a Steam client bug: after a Fake IP is allocated, BeginAsyncRequestFakeIP keeps failing on relaunch until Steam restarts, with the cause logged in console_log.txt. The reproduction is a C# probe in an external gist that calls SteamAPI_Init, InitRelayNetworkAccess, and GetFakeIP/BeginAsyncRequestFakeIP, and nothing in this repository's source is named as the fix location. Done would mean the repro is confirmed and the report is routed to the Steamworks team, since the code involved is in the closed-source Steam client.

由索引模型根据 Issue 内容生成。

描述

Apologies I know this repo isn't technically related to the Steam client's SDR/FakeIP networking, but I see a couple of older tickets mentioning it so this seems like the best place to post about it where someone involved with it might see it.


So after my game successfully allocates a Fake IP via GetFakeIP/BeginAsyncRequestFakeIP and then exits normally, any more re-launches of that same App ID get a k_EResultFail from BeginAsyncRequestFakeIP for as long as the Steam client is running. Steam's console_log.txt shows this error message:

src/clientdll/clientnetworkingapi.cpp (2809) : YldRequestFakeIP called again.  Not allowed!

Restarting the Steam client fixes it for one launch, so does launching another game in between.

I've reproduced this on both Windows x64 and macOS arm64, Steam client version 1793235415

Steps to reproduce it:

  1. Restart Steam
  2. Run a minimal program that calls SteamAPI_Init, InitRelayNetworkAccess, InitAuthentication, requests a fake ip via GetFakeIP/BeginAsyncRequestFakeIP and wait for the result. The first time will give you a k_EResultOK with a valid Fake IP address and port. Then exit the program if its still running.
  3. Re-run the program, but this time you'll get k_EResultFail and the line in the console_log.txt from above.
  4. From now on it will keep failing with k_EResultFail

To clear it you'll need to either restart Steam or launch any other game that goes through the SteamAPI_Init.

Here's a .NET 10 C# project using Steamworks.NET that I've reproduced the error with: https://gist.github.com/philo23/f3ebcbe8aaf14df6f49a0822f8843534

It'll write a probe.log file into bin/Debug/net10.0/ along side the dll

$ echo 480 > steamapp_id.txt

$ dotnet bin/Debug/net10.0/Probe.dll
[2026-10-31 22:49:48.331Z pid=7012] PROBE start
[2026-10-31 22:49:48.348Z pid=7012] PROBE launched by Steam=False; SteamAppId=-; SteamGameId=-
[2026-10-31 22:49:48.348Z pid=7012] PROBE cwd=/tmp/steam-fakeip-probe; args=
[S_API] SteamAPI_Init(): Loaded '/Users/redacted/Library/Application Support/Steam/Steam.AppBundle/Steam/Contents/MacOS/steamclient.dylib' OK.
Setting breakpad minidump AppID = 480
SteamInternal_SetMinidumpSteamID:  Caching Steam ID:  7656119XXXXXXXXXX [API loaded no]
[2026-10-31 22:49:48.405Z pid=7012] PROBE init=k_ESteamAPIInitResult_OK;
[2026-10-31 22:49:48.406Z pid=7012] PROBE app=480
[2026-10-31 22:49:48.410Z pid=7012] PROBE auth=k_ESteamNetworkingAvailability_Attempting
[2026-10-31 22:49:48.412Z pid=7012] PROBE initial=k_EResultNoMatch; IPv4 present=False; port present=False
[2026-10-31 22:49:48.412Z pid=7012] PROBE begin=True
[2026-10-31 22:49:48.418Z pid=7012] SDK k_ESteamNetworkingSocketsDebugOutputType_Verbose: Got cert for steamid:7656119XXXXXXXXXX from Steam
[2026-10-31 22:49:48.419Z pid=7012] SDK k_ESteamNetworkingSocketsDebugOutputType_Msg: Certificate expires in 40h18m at 1793632101 (current time 1793486987), will renew in 38h18m
[2026-10-31 22:49:48.441Z pid=7012] SDK k_ESteamNetworkingSocketsDebugOutputType_Warning: SDR network config fetch attempt #1 failed.  HTTP 504.  .  Trying again.
[2026-10-31 22:49:48.566Z pid=7012] SDK k_ESteamNetworkingSocketsDebugOutputType_Msg: Got SDR network config.  Loaded revision 1793064244 OK
[2026-10-31 22:49:48.566Z pid=7012] SDK k_ESteamNetworkingSocketsDebugOutputType_Msg: Performing ping measurement
[2026-10-31 22:49:48.566Z pid=7012] SDK k_ESteamNetworkingSocketsDebugOutputType_Msg: SDR RelayNetworkStatus:  avail=Attempting  config=OK  anyrelay=Attempting   (Performing ping measurement)
[2026-10-31 22:49:48.566Z pid=7012] SDK k_ESteamNetworkingSocketsDebugOutputType_Msg: AuthStatus (steamid:7656119XXXXXXXXXX):  OK  (OK)
[2026-10-31 22:49:48.652Z pid=7012] SDK k_ESteamNetworkingSocketsDebugOutputType_Verbose: Communications with routing cluster 'fra' established.
[2026-10-31 22:49:48.664Z pid=7012] SDK k_ESteamNetworkingSocketsDebugOutputType_Verbose: Communications with routing cluster 'sto2' established.
[2026-10-31 22:49:48.690Z pid=7012] PROBE callback=k_EResultOK; IPv4 present=True; port present=True
[2026-10-31 22:49:48.713Z pid=7012] PROBE final=k_EResultOK; IPv4 present=True; port present=True
[2026-10-31 22:49:48.741Z pid=7012] PROBE shutdown

$ dotnet bin/Debug/net10.0/Probe.dll
[2026-10-31 22:49:52.799Z pid=7077] PROBE start
[2026-10-31 22:49:52.815Z pid=7077] PROBE launched by Steam=False; SteamAppId=-; SteamGameId=-
[2026-10-31 22:49:52.815Z pid=7077] PROBE cwd=/tmp/steam-fakeip-probe; args=
[S_API] SteamAPI_Init(): Loaded '/Users/redacted/Library/Application Support/Steam/Steam.AppBundle/Steam/Contents/MacOS/steamclient.dylib' OK.
Setting breakpad minidump AppID = 480
SteamInternal_SetMinidumpSteamID:  Caching Steam ID:  7656119XXXXXXXXXX [API loaded no]
[2026-10-31 22:49:52.867Z pid=7077] PROBE init=k_ESteamAPIInitResult_OK;
[2026-10-31 22:49:52.868Z pid=7077] PROBE app=480
[2026-10-31 22:49:52.870Z pid=7077] PROBE auth=k_ESteamNetworkingAvailability_Attempting
[2026-10-31 22:49:52.871Z pid=7077] PROBE initial=k_EResultNoMatch; IPv4 present=False; port present=False
[2026-10-31 22:49:52.872Z pid=7077] PROBE begin=True
[2026-10-31 22:49:53.080Z pid=7077] SDK k_ESteamNetworkingSocketsDebugOutputType_Verbose: Got cert for steamid:7656119XXXXXXXXXX from Steam
[2026-10-31 22:49:53.080Z pid=7077] SDK k_ESteamNetworkingSocketsDebugOutputType_Msg: Certificate expires in 40h18m at 1793632101 (current time 1793486991), will renew in 38h18m
[2026-10-31 22:49:53.084Z pid=7077] PROBE callback=k_EResultFail; IPv4 present=False; port present=False
[2026-10-31 22:49:53.105Z pid=7077] PROBE final=k_EResultFail; IPv4 present=False; port present=False
[2026-10-31 22:49:53.108Z pid=7077] PROBE shutdown
主要语言
C++
星标
10k
派生
767
PR 合并指标
30 天内没有已合并 PR

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

ValveSoftware/GameNetworkingSockets 的其他 Issue

查看 ValveSoftware/GameNetworkingSockets 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。