Skip to main content

next_ephemeral_port

Function next_ephemeral_port 

Source
pub fn next_ephemeral_port(
    start: u16,
    is_in_use: impl Fn(u16) -> bool,
) -> Option<u16>
Expand description

エフェメラルポートカウンタの次の値を、既存の生きたソケットと衝突しない ところまで進めて返す(純粋ロジック)。

【2026-08-31】カウンタは 40000 起点で単調増加し、65535 到達で 40000 へラップアラウンドする。ラップアラウンド後、テーブルに残っている 生きたソケットと同じローカルポートを再び払い出すと、tcp_find_socketlocal_port + remote_ip + remote_port の一致だけで判定するため、 別の生きた接続と誤って混線するリスクがある (TCP_SOCKET_TABLE_SIZE が小さくポート範囲が広いため実害の可能性は 低いが、理論上は起こりうる。spec/TODO.md 参照)。

is_in_use が真を返す間は候補を進め続ける。全ポートが使用中 (テーブルが空いているのにこれが起きることは無いはずだが、 呼び出し側の不整合に備えて)なら None を返し、 呼び出し側は従来どおり衝突未確認のまま払い出すか、エラーにする。

計算量: 最悪 O(ポート範囲) だが、通常は 0〜数回で衝突なしと判定できる。