# porter/libsrc/porter/thread/potrConnectThread.c

# 1 ファイル

## 1.1 porter/libsrc/porter/thread/potrConnectThread.c

TCP 接続管理スレッドモジュール。

SENDER: TCP connect/reconnect ループを管理するスレッドです。
RECEIVER: TCP accept ループを管理するスレッドです。
接続確立後、送受信・ヘルスチェックスレッドを起動し、
recv スレッドが切断を検知して終了するまで待機してから再接続サイクルへ移行します。

### 1.1.1 作者

c-modernization-kit sample team

### 1.1.2 バージョン

1.0.0

### 1.1.3 日付

2026/03/23

### 1.1.4 著作権

Copyright (C) CompanyName, Ltd. 2026. All rights reserved.

# 2 関数

## 2.1 connect_get_ms

    static uint64_t connect_get_ms ( void )

## 2.2 close_tcp_conn

    static void close_tcp_conn ( struct PotrContext_ *ctx, int path_idx )

## 2.3 reconnect_wait

    static void reconnect_wait ( struct PotrContext_ *ctx, int path_idx, uint32_t wait_ms )

## 2.4 accept_tcp_read_all

    static int accept_tcp_read_all ( PotrSocket fd, uint8_t *buf, size_t n )

## 2.5 accept_tcp_wait_readable

    static int accept_tcp_wait_readable ( PotrSocket fd, uint32_t wait_ms )

## 2.6 tcp_read_first_packet

    static int tcp_read_first_packet ( PotrSocket fd, uint8_t *buf, size_t max_buf, size_t *out_len, uint32_t timeout_ms )

## 2.7 tcp_session_compare

    static int tcp_session_compare ( const struct PotrContext_ *ctx, const PotrPacket *pkt )

## 2.8 join_recv_thread

    static void join_recv_thread ( struct PotrContext_ *ctx, int path_idx )

## 2.9 reset_connection_state

    static void reset_connection_state ( struct PotrContext_ *ctx )

## 2.10 reset_all_paths_disconnected

    static void reset_all_paths_disconnected ( struct PotrContext_ *ctx )

## 2.11 reset_send_queue

    static void reset_send_queue ( struct PotrContext_ *ctx )

## 2.12 start_connected_threads

    static int start_connected_threads ( struct PotrContext_ *ctx, int path_idx )

## 2.13 stop_connected_threads

    static void stop_connected_threads ( struct PotrContext_ *ctx, int path_idx )

## 2.14 tcp_connect_with_timeout

    static PotrSocket tcp_connect_with_timeout ( struct PotrContext_ *ctx, int path_idx )

## 2.15 sender_connect_loop

    static void sender_connect_loop ( struct PotrContext_ *ctx, int path_idx )

## 2.16 receiver_accept_loop

    static void receiver_accept_loop ( struct PotrContext_ *ctx, int path_idx )

## 2.17 connect_thread_func

    static void *connect_thread_func ( void *arg )

## 2.18 potr_connect_thread_start

    int potr_connect_thread_start ( struct PotrContext_ *ctx )

TCP 接続管理スレッドを起動します (path 数分)。

TCP 接続管理スレッドを起動します。

呼び出し前提:

- SENDER: dst_addr_resolved[i] および dst_port が設定済みであること (n_path 分)。
- RECEIVER: tcp_listen_sock[i] が listen 状態であること (n_path 分)。
- tcp_state_mutex / tcp_state_cv / tcp_send_mutex[] が初期化済みであること。

### 2.18.1 引数

- ctx [in,out] セッションコンテキストへのポインタ。

### 2.18.2 戻り値

成功時は POTR_SUCCESS、失敗時は POTR_ERROR を返します。

## 2.19 potr_connect_thread_stop

    void potr_connect_thread_stop ( struct PotrContext_ *ctx )

TCP 接続管理スレッドを停止します。

1. connect_thread_running[i] フラグを全 path クリアして停止を通知する。
2. tcp_state_cv をブロードキャストして reconnect sleep を中断する。
3. tcp_listen_sock[i] (RECEIVER) を全 path クローズして accept ブロックを解除する。
4. tcp_conn_fd[i] を全 path クローズして recv ループをブロック解除する。
5. connect_thread[i] の終了を全 path 待機する。
6. 送信スレッドを停止する (全 path join 後)。 依存スレッド (recv/health) のクリーンアップは各 connect_thread 内で行われる。

### 2.19.1 引数

- ctx [in,out] セッションコンテキストへのポインタ。

# 3 変数

## 3.1 s_connect_args

    static ConnectArg[POTR_MAX_PATH] s_connect_args;

# 4 定数、マクロ

## 4.1 TCP_SESSION_NEW

    #define TCP_SESSION_NEW ( 1)  /* 新セッション (または初回接続) */

## 4.2 TCP_SESSION_SAME

    #define TCP_SESSION_SAME ( 0)  /* 同一セッション                 */

## 4.3 TCP_SESSION_OLD

    #define TCP_SESSION_OLD (-1)  /* 旧セッション (破棄すべき)      */

# 5 クラス/構造体

## 5.1 ConnectArg

    struct ConnectArg {
        struct PotrContext_ *ctx;
        int path_idx;
        int _pad;
    }

### 5.1.1 属性

#### 5.1.1.1 ctx

    struct PotrContext_ *ctx;

#### 5.1.1.2 path_idx

    int path_idx;

#### 5.1.1.3 _pad

    int _pad;