fix(network): one non-open data channel aborts a UDP broadcast for every client
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 82/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- typescript
- 領域
- networking
調査の方向性
modules/network/src/server/udp.server.network.tsの244~248行目と402~407行目付近を読み、peer-host.ts:203のPeerHost.sendと送信処理を比較してください。データチャネルが開いていない場合や送信で例外が発生した場合に、宛先の反復処理がどう動作するかを確認してください。1つの宛先のチャネル状態や送信エラーによって後続クライアントへのブロードキャストが妨げられなければ完了です。関連するネットワークテストを実行してください。
索引モデルが issue の本文から書いたものです。
説明
Which package is this bug report for?
network
Issue description
The channel state is put into _clients in ondatachannel, before onopen. send calls channel.send with no readyState check, so an InvalidStateError (or an oversize SCTP message) escapes forEach: while one client connects or disconnects, every later client misses the broadcast and the error reaches the game loop. PeerHost.send (peer-host.ts:203) checks readyState.
Where:
modules/network/src/server/udp.server.network.ts:244-248modules/network/src/server/udp.server.network.ts:402-407
Evidence:
this._clients.forEach((channels) => { const state = channels.get(channel); if (state) this.send(state, data); });
private send(state, data) { state.channel.send(state.sequencer ? state.sequencer.wrap(data) : data); }
Suggested fix: Skip channels that are not "open", and catch and log send errors per recipient.
Found during a code audit of main at be72076.
Code sample
No response
Versions
- Engine
mainat be72076 - pnpm 12.0.0, Node.js 26, Bun 1.3.14
Issue priority
Medium (should be fixed soon)
I have tested this issue on a development release
be72076
- 主要言語
- TypeScript
- スター
- 7
- フォーク
- 2
- 平均マージ
- 1日 17時間
- マージ済み PR(30日)
- 17
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
NanoForge-dev/Engine のほかの issue
-
dependencies enhancement good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
NanoForge-dev/Engine#513 ·
メンテナーはふだん 1 日以内に返信
-
bug chore tests
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
NanoForge-dev/Engine#511 ·
メンテナーはふだん 1 日以内に返信
-
docs(network): TSDoc says ICE_SERVERS defaults to an empty list, the code uses public STUN serversオープンdocumentation good first issue modules:network
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
NanoForge-dev/Engine#509 ·
メンテナーはふだん 1 日以内に返信
-
documentation modules:ecs packages:asset packages:core
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
NanoForge-dev/Engine#508 ·
メンテナーはふだん 1 日以内に返信
-
bug good first issue modules:music modules:sound
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
NanoForge-dev/Engine#505 ·
メンテナーはふだん 1 日以内に返信
NanoForge-dev/Engine の issue をすべて見る
似ている issue
-
Mend: dependency security vulnerability
難易度 1/5 1〜3時間 初心者へのやさしさ 65/100
fdm-monster/fdm-monster#5563 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
be-BOP-io-SA/be-BOP#2849 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 79/100
メンテナーはふだん 1 日以内に返信
-
1️⃣ phase/under-investigation flaky/confirmed flaky/needs-decision type/bug
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
growilabs/growi#12246 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
-
🐛 The Rulekeeper - An index run that gives up on the lock ends Succeeded対応中かも @github-actions が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
SSWConsulting/SSW.Rules#2809 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信