ISteamNetworkingSockets: Trying to use over 8 network lanes/channels fails
I maintainer di solito rispondono entro 2 giorni
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 55/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- cpp
- Ambito
- networking
Direzione di ricerca
Read GetLane() in src/steamnetworkingsockets/clientlib/steamnetworkingsockets_snp.cpp, focusing on how SerializeVarInt() encodes lane IDs and how m_cbHdr is calculated. Reproduce the failure with more than eight lanes, then check whether the header length and connection behavior are correct after the reported change.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hello! We're pivoting our Godot project's network services to Steam's, using ISteamNetworkingSockets via GodotSteam (GodotSteam versions 4.17.1 and 4.23, if relevant) instead of EOS.
We'd split our traffic into 21 channels while using EOS to get around another issue we were having, but found when migrating to Steam that Steam appears to only support 8 - if you try to use more than 8 channels/lanes, you'll get a message like:
Steam connection 2199661473 status changed: 3 -> 4. End reason: 5002 (SNP decode unreliable msgnum underflow. 0 mod 10000, highest seen 0). Remote: 76561198127298424. Description: #2199661473 P2P ICE steamid:76561198127298424 vport 41500
30.300396825394, peer 1: Client left: 704154296
After some research (I assumed it was my code first, then GodotSteam's second, I now see this in GetLane() in src/steamnetworkingsockets/clientlib/steamnetworkingsockets_snp.cpp (main branch as of this writing):
// Get a conservative size for the header we will need to select the specified lane.
// This assumes the lanes will be encoded in order.
if ( nLaneID == 0 ) // Lane zero is the default
{
Assert( m_idxLane0 == -1 );
pNewLane->m_cbHdr = 0;
m_idxLane0 = len( m_vecLanes )-1;
}
else
{
if ( nLaneID <= 7 )
{
pNewLane->m_cbHdr = 1;
pNewLane->m_hdr[0] = (uint8)( 0x87 + nLaneID );
} else {
pNewLane->m_hdr[0] = 0x8f;
uint8 *p = SerializeVarInt( &pNewLane->m_hdr[1], (unsigned)nLaneID );
pNewLane->m_cbHdr = p - &pNewLane->m_hdr[1];
}
m_cbRemainingForSegments -= pNewLane->m_cbHdr;
}
Specifically, if I'm reading it right, this line may be in error:
pNewLane->m_cbHdr = p - &pNewLane->m_hdr[1];
It looks like this logic is trying to put the number of bytes for the lane being used into pNewLane->m_cbHdr - so for 8 lanes, this ought to be 2 bytes, but the above logic will return 1, and the connection will fail with the above error. I think that line should read:
pNewLane->m_cbHdr = p - &pNewLane->m_hdr[0];
Sorry if this isn't the right place to report this! Also happy to be wrong if I'm misreading how that works. Thanks!
- Lingua principale
- C++
- Stelle
- 10k
- Fork
- 767
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di ValveSoftware/GameNetworkingSockets
-
ICE (native client): relay-only connections time out against a real TURN server; host-socket checks starve the relay pairsForse già presa @Mr444-dev l’ha presa 4 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
ValveSoftware/GameNetworkingSockets#452 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 4/5 Più di una settimana Idoneità per principianti 12/100
ValveSoftware/GameNetworkingSockets#465 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 18/100
ValveSoftware/GameNetworkingSockets#464 ·
I maintainer di solito rispondono entro 2 giorni
-
Assertion Failed: pSock->m_callback.m_fnCallback (socketthread.cpp:2609) after re-initializing the library with GameNetworkingSockets_Kill + GameNetworkingSockets_InitForse già presa @siddiqueirshad l’ha presa 10 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
ValveSoftware/GameNetworkingSockets#458 ·
I maintainer di solito rispondono entro 2 giorni
-
ConfigureConnectionLanes: reconfiguring lanes can leave one lane in a stale priority classForse già presa @sebxt l’ha presa 18 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
ValveSoftware/GameNetworkingSockets#453 ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di ValveSoftware/GameNetworkingSockets
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
Sunrisepeak/mcpp-language-server#80 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
xiaoyifang/goldendict-ng#3148 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 91/100
triton-inference-server/server#9069 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 4 giorni