Steam transport: identity-resolved accepts + load-proof timeout
Round four reached one step from the race: eggs delivered, both members ACKed with complete meshes, one member entered LoadingMission. Two failures remained, both now fixed. One: Steam reports incoming callers under locally-allocated ALIAS FakeIPs, not their global ones - the owner accepted both mesh legs but its identity check compared the alias against the egg address and never counted the connections (no Connected to GameMachineHost on the owner). The peer table now carries each member SteamID (lobby go roster gained a field) and Accept resolves the caller identity back to the global FakeIP the egg promised. Two: mission load stalls the game thread for 10-30s with nothing pumping, and Steam default 10s connected-timeout sheared every connection mid-load (end reason 4001, rx ages 11.5-20.5s - right at load duration). Connected timeout is now 90s; TCP never timed out an idle arcade link and races pump every frame once running. Self-test still green (ping, survives listener close). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+15
-6
@@ -205,7 +205,8 @@ namespace
|
||||
if (members[i].published)
|
||||
{
|
||||
SteamNetTransport_RegisterPeer(
|
||||
members[i].ip, members[i].consolePort, members[i].gamePort);
|
||||
members[i].ip, members[i].consolePort, members[i].gamePort,
|
||||
members[i].id.ConvertToUint64());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -513,13 +514,14 @@ namespace
|
||||
if (all_published && room.memberCount >= 1)
|
||||
{
|
||||
++gLastGoNonce;
|
||||
char go[600];
|
||||
char go[800];
|
||||
sprintf(go, "%d:", gLastGoNonce);
|
||||
for (int i = 0; i < room.memberCount; ++i)
|
||||
{
|
||||
char entry[64];
|
||||
sprintf(entry, "%s|%d|%d;", room.members[i].ip,
|
||||
room.members[i].consolePort, room.members[i].gamePort);
|
||||
char entry[96];
|
||||
sprintf(entry, "%s|%d|%d|%I64u;", room.members[i].ip,
|
||||
room.members[i].consolePort, room.members[i].gamePort,
|
||||
room.members[i].id.ConvertToUint64());
|
||||
if (strlen(go) + strlen(entry) < sizeof(go))
|
||||
{
|
||||
strcat(go, entry);
|
||||
@@ -554,6 +556,7 @@ namespace
|
||||
{
|
||||
char ip[32];
|
||||
int console_port = 0, game_port = 0;
|
||||
unsigned __int64 steam_id = 0;
|
||||
int n = 0;
|
||||
while (cursor[n] != '\0' && cursor[n] != '|' &&
|
||||
n < (int) sizeof(ip) - 1)
|
||||
@@ -571,13 +574,19 @@ namespace
|
||||
if (*cursor == '|')
|
||||
{
|
||||
game_port = atoi(++cursor);
|
||||
while (*cursor != '\0' && *cursor != '|' && *cursor != ';') ++cursor;
|
||||
}
|
||||
if (*cursor == '|')
|
||||
{
|
||||
steam_id = _strtoui64(++cursor, NULL, 10);
|
||||
}
|
||||
while (*cursor != '\0' && *cursor != ';') ++cursor;
|
||||
if (*cursor == ';') ++cursor;
|
||||
|
||||
if (ip[0] != '\0' && console_port > 0 && game_port > 0)
|
||||
{
|
||||
SteamNetTransport_RegisterPeer(ip, console_port, game_port);
|
||||
SteamNetTransport_RegisterPeer(
|
||||
ip, console_port, game_port, steam_id);
|
||||
}
|
||||
}
|
||||
outcome = LobbyLaunchMember;
|
||||
|
||||
Reference in New Issue
Block a user