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;