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 インクルード元

potrConnectThread.c のインクルード元

1.1.5 著作権

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

2 関数

2.1 connect_get_ms

static uint64_t connect_get_ms ( void )

2.1.1 呼び出し元

connect_get_ms の呼び出し元

2.2 close_tcp_conn

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

2.2.1 呼び出し元

close_tcp_conn の呼び出し元

2.3 reconnect_wait

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

2.3.1 呼び出し元

reconnect_wait の呼び出し元

2.4 accept_tcp_read_all

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

2.4.1 呼び出し元

accept_tcp_read_all の呼び出し元

2.5 accept_tcp_wait_readable

static int accept_tcp_wait_readable ( PotrSocket fd, uint32_t wait_ms )

2.5.1 呼び出し元

accept_tcp_wait_readable の呼び出し元

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.6.1 呼び出し元

tcp_read_first_packet の呼び出し元

2.6.2 呼び出し先

tcp_read_first_packet の呼び出し先

2.7 tcp_session_compare

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

2.7.1 呼び出し元

tcp_session_compare の呼び出し元

2.8 join_recv_thread

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

2.8.1 呼び出し元

join_recv_thread の呼び出し元

2.9 reset_connection_state

static void reset_connection_state ( struct PotrContext_ *ctx )

2.9.1 呼び出し元

reset_connection_state の呼び出し元

2.10 reset_all_paths_disconnected

static void reset_all_paths_disconnected ( struct PotrContext_ *ctx )

2.10.1 呼び出し元

reset_all_paths_disconnected の呼び出し元

2.11 reset_send_queue

static void reset_send_queue ( struct PotrContext_ *ctx )

2.11.1 呼び出し元

reset_send_queue の呼び出し元

2.11.2 呼び出し先

reset_send_queue の呼び出し先

2.12 start_connected_threads

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

2.12.1 呼び出し元

start_connected_threads の呼び出し元

2.12.2 呼び出し先

start_connected_threads の呼び出し先

2.13 stop_connected_threads

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

2.13.1 呼び出し元

stop_connected_threads の呼び出し元

2.13.2 呼び出し先

stop_connected_threads の呼び出し先

2.14 tcp_connect_with_timeout

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

2.14.1 呼び出し元

tcp_connect_with_timeout の呼び出し元

2.15 sender_connect_loop

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

2.15.1 呼び出し元

sender_connect_loop の呼び出し元

2.15.2 呼び出し先

sender_connect_loop の呼び出し先

2.16 receiver_accept_loop

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

2.16.1 呼び出し元

receiver_accept_loop の呼び出し元

2.16.2 呼び出し先

receiver_accept_loop の呼び出し先

2.17 connect_thread_func

static void *connect_thread_func ( void *arg )

2.17.1 呼び出し元

connect_thread_func の呼び出し元

2.17.2 呼び出し先

connect_thread_func の呼び出し先

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.18.3 呼び出し元

potr_connect_thread_start の呼び出し元

2.18.4 呼び出し先

potr_connect_thread_start の呼び出し先

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] セッションコンテキストへのポインタ。

2.19.2 呼び出し元

potr_connect_thread_stop の呼び出し元

2.19.3 呼び出し先

potr_connect_thread_stop の呼び出し先

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 コラボレーション図

ConnectArg のコラボレーション図

5.1.2 属性

5.1.2.1 ctx

struct PotrContext_ *ctx;

5.1.2.2 path_idx

int path_idx;

5.1.2.3 _pad

int _pad;