---
generated_at: 2026-02-21 15:30:00
metrics:
  claims_total: 45
  claims_with_evidence: 43
  claims_without_evidence: 2
confidence_derived: 0.96
---

# 根拠レポート：tcp.csv

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：43 / 45、根拠なし：2
- 優先レビュー（高）
  1. **C-14 (nextConnectionAsync待機動作)**：実際の非同期動作はランタイム依存
  2. **C-20 (stopListening後の状態)**：停止後の挙動は実装依存

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `src/tcp/Server.php` - Server クラス定義（createAsync, nextConnectionAsync, getLocalAddress, stopListening）
- E-02: `src/tcp/connect.php` - connect_async, connect_nd_async 関数定義
- E-03: `src/tcp/Socket.php` - Socket インターフェース定義
- E-04: `src/tcp/CloseableSocket.php` - CloseableSocket インターフェース定義
- E-05: `src/tcp/ConnectOptions.php` - ConnectOptions 型定義
- E-06: `src/tcp/ServerOptions.php` - ServerOptions 型定義
- E-07: `src/tcp/_Private/CloseableTCPSocket.php` - CloseableTCPSocket クラス定義
- E-08: `src/network/IPProtocolVersion.php` - IPProtocolVersion enum定義
- E-09: `src/network/IPProtocolBehavior.php` - IPProtocolBehavior enum定義
- E-10: `src/network/Socket.php` - Network\Socket インターフェース定義
- E-11: `src/network/Server.php` - Network\Server インターフェース定義

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | Server.createAsync IPv4サーバー作成 | E-01 L24-103 (createAsync実装、IPV4ケース L64-91) | ○ |
| C-02 | Server.createAsync IPv6サーバー作成 | E-01 L24-103 (createAsync実装、IPV6ケース L31-63) | ○ |
| C-03 | Server.createAsync ホスト名解決 | E-01 L39-43, L71-75 (_Network\resolve_hostname呼び出し) | ○ |
| C-04 | Server.createAsync backlogオプション | E-01 L99, E-06 L14-15 (opts['backlog'] ?? 16) | ○ |
| C-05 | Server.createAsync socket_optionsオプション | E-01 L100, E-06 L16 (opts['socket_options'] ?? shape()) | ○ |
| C-06 | Server.createAsync 無効IPv4エラー | E-01 L66-70 (inet_pton_inet例外処理) | ○ |
| C-07 | Server.createAsync 無効IPv6エラー | E-01 L34-38 (inet_pton_inet6例外処理) | ○ |
| C-08 | Server.createAsync ホスト名解決失敗エラー | E-01 L72-86 (resolve_hostname null時の処理) | ○ |
| C-09 | Server.createAsync IPv6非対応エラー | E-01 L44-52 (EADDRNOTAVAIL throw) | ○ |
| C-10 | Server.createAsync 動的ポート割り当て | E-01 L58, L90 (port引数、ポート0で動的割当) | ○ |
| C-11 | Server.createAsync 最大ポート番号 | E-01 L27 (port: int型) | ○ |
| C-12 | Server.nextConnectionAsync 接続受け入れ | E-01 L105-108 (_Network\socket_accept_async) | ○ |
| C-13 | Server.nextConnectionAsync 複数接続処理 | E-01 L105-108 (Awaitable<CloseableSocket>戻り値) | ○ |
| C-14 | Server.nextConnectionAsync 接続待機 | E-01 L105-108 (Awaitable型) | △ |
| C-15 | Server.getLocalAddress IPv4 | E-01 L110-117 (sockaddr_in判定、inet_ntop_inet) | ○ |
| C-16 | Server.getLocalAddress IPv6 | E-01 L115-117 (sockaddr_in6判定、inet_ntop_inet6) | ○ |
| C-17 | Server.getLocalAddress 動的ポート取得 | E-01 L113, L116 (getPort()呼び出し) | ○ |
| C-18 | Server.getLocalAddress 非対応アドレスファミリー | E-01 L118-122 (EAFNOSUPPORT throw) | ○ |
| C-19 | Server.stopListening 停止 | E-01 L125-127 (OS\close呼び出し) | ○ |
| C-20 | Server.stopListening 停止後の状態 | E-01 L125-127 (close後の挙動) | △ |
| C-21 | connect_async IPv4接続 | E-02 L21-94 (PF_INET処理 L45-56) | ○ |
| C-22 | connect_async IPv6接続 | E-02 L21-94 (PF_INET6処理 L57-71) | ○ |
| C-23 | connect_async PREFER_IPV6 | E-02 L26, L29-30 (デフォルト動作、sds配列) | ○ |
| C-24 | connect_async IPv4フォールバック | E-02 L41-86 (foreachループ、例外キャッチ後継続) | ○ |
| C-25 | connect_async FORCE_IPV4 | E-02 L35-36 (PF_INETのみ) | ○ |
| C-26 | connect_async FORCE_IPV6 | E-02 L32-33 (PF_INET6のみ) | ○ |
| C-27 | connect_async タイムアウト設定 | E-02 L27, L81 (timeout_ns取得、socket_connect_async渡し) | ○ |
| C-28 | connect_async 接続失敗エラー | E-02 L83-85 (ErrnoException catch) | ○ |
| C-29 | connect_async ホスト名解決失敗 | E-02 L87-92 (EINVAL throw) | ○ |
| C-30 | connect_async FORCE_IPV6非対応エラー | E-02 L32-33, L57-71 (IPv6専用、解決失敗時) | ○ |
| C-31 | connect_async タイムアウトエラー | E-02 L81 (timeout_ns渡し) | ○ |
| C-32 | connect_async タイムアウト0 | E-02 L27 (timeout_ns ?? 0) | ○ |
| C-33 | connect_nd_async 互換性 | E-02 L96-103 (Deprecated、connect_async呼び出し) | ○ |
| C-34 | CloseableTCPSocket コンストラクタ | E-07 L22-24 (parent::__construct呼び出し) | ○ |
| C-35 | CloseableTCPSocket getLocalAddress | E-07 L26-32 (getsockname、inet_ntop_inet) | ○ |
| C-36 | CloseableTCPSocket getLocalAddress IP形式 | E-07 L28-29 (inet_ntop_inet呼び出し) | ○ |
| C-37 | CloseableTCPSocket getPeerAddress | E-07 L34-40 (getpeername、inet_ntop_inet) | ○ |
| C-38 | CloseableTCPSocket getPeerAddress IP形式 | E-07 L35-38 (inet_ntop_inet呼び出し) | ○ |
| C-39 | CloseableTCPSocket getPeerAddress 未接続エラー | E-07 L35 (getpeername呼び出し、未接続時の挙動) | ○ |
| C-40 | Socket TAddress型 | E-03 L24 (const type TAddress = (string, int)) | ○ |
| C-41 | CloseableSocket インターフェース継承 | E-04 L17-18 (extends Socket, Network\CloseableSocket) | ○ |
| C-42 | ConnectOptions timeout_ns型 | E-05 L15 (?'timeout_ns' => ?int) | ○ |
| C-43 | ConnectOptions ip_version型 | E-05 L16 (?'ip_version' => Network\IPProtocolBehavior) | ○ |
| C-44 | ServerOptions backlog型 | E-06 L15 (?'backlog' => int) | ○ |
| C-45 | ServerOptions socket_options型 | E-06 L16 (?'socket_options' => Network\SocketOptions) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-14 (nextConnectionAsync待機動作)**：非同期待機の具体的な動作はHHVMランタイムに依存するため、ソースコードからは完全に確認できない
  - 候補：HHVMドキュメント / 実行時テスト / Awaitableの仕様書
- **C-20 (stopListening停止後の状態)**：close()後にnextConnectionAsync()を呼び出した場合の挙動は実装依存
  - 候補：OS\close仕様 / 実行時テスト / エラーハンドリング仕様

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**：型定義関連のテストケース（C-40〜C-45）- 静的型チェックで保証される
- **1（中リスク）**：非同期動作関連（C-14）- ランタイム依存の動作確認が必要
- **1（中リスク）**：リソース解放後の状態（C-20）- エッジケースの動作確認が必要
- **0（低リスク）**：その他のテストケース - ソースコードから直接確認可能

## 6) レビュアーチェックリスト（最小）
- [ ] Server.createAsyncのIPv4/IPv6両ケースの分岐処理が正しくテストケースに反映されているか
- [ ] connect_asyncのIPProtocolBehavior各値（PREFER_IPV6, FORCE_IPV6, FORCE_IPV4）の動作が網羅されているか
- [ ] エラー処理（ErrnoException）のテストケースが主要なエラーコードをカバーしているか
- [ ] CloseableTCPSocketのgetLocalAddress/getPeerAddressが接続状態に応じた動作をテストしているか
- [ ] 型定義（ConnectOptions, ServerOptions）のオプショナルフィールドが正しく認識されているか
- [ ] 非推奨関数（connect_nd_async）の互換性テストが含まれているか
