porter/libsrc/porter/thread/potrConnectThread.c
ファイル
porter/libsrc/porter/thread/potrConnectThread.c
TCP 接続管理スレッドモジュール。
SENDER: TCP connect/reconnect ループを管理するスレッドです。
RECEIVER: TCP accept ループを管理するスレッドです。
接続確立後、送受信・ヘルスチェックスレッドを起動し、
recv スレッドが切断を検知して終了するまで待機してから再接続サイクルへ移行します。
作者
c-modernization-kit sample team
バージョン
1.0.0
日付
2026/03/23
インクルード元
potrConnectThread.c のインクルード元
著作権
Copyright (C) CompanyName, Ltd. 2026. All rights reserved.
関数
connect_get_ms
static uint64_t connect_get_ms ( void )
呼び出し元
connect_get_ms の呼び出し元
close_tcp_conn
static void close_tcp_conn ( struct PotrContext_ *ctx, int path_idx )
呼び出し元
close_tcp_conn の呼び出し元
reconnect_wait
static void reconnect_wait ( struct PotrContext_ *ctx, int path_idx, uint32_t wait_ms )
呼び出し元
reconnect_wait の呼び出し元
accept_tcp_read_all
static int accept_tcp_read_all ( PotrSocket fd, uint8_t *buf, size_t n )
呼び出し元
accept_tcp_read_all の呼び出し元
accept_tcp_wait_readable
static int accept_tcp_wait_readable ( PotrSocket fd, uint32_t wait_ms )
呼び出し元
accept_tcp_wait_readable の呼び出し元
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 )
呼び出し元
tcp_read_first_packet の呼び出し元
呼び出し先
tcp_read_first_packet の呼び出し先
tcp_session_compare
static int tcp_session_compare ( const struct PotrContext_ *ctx, const PotrPacket *pkt )
呼び出し元
tcp_session_compare の呼び出し元
join_recv_thread
static void join_recv_thread ( struct PotrContext_ *ctx, int path_idx )
呼び出し元
join_recv_thread の呼び出し元
reset_connection_state
static void reset_connection_state ( struct PotrContext_ *ctx )
呼び出し元
reset_connection_state の呼び出し元
reset_all_paths_disconnected
static void reset_all_paths_disconnected ( struct PotrContext_ *ctx )
呼び出し元
reset_all_paths_disconnected の呼び出し元
reset_send_queue
static void reset_send_queue ( struct PotrContext_ *ctx )
呼び出し元
reset_send_queue の呼び出し元
呼び出し先
reset_send_queue の呼び出し先
start_connected_threads
static int start_connected_threads ( struct PotrContext_ *ctx, int path_idx )
呼び出し元
start_connected_threads の呼び出し元
呼び出し先
start_connected_threads の呼び出し先
stop_connected_threads
static void stop_connected_threads ( struct PotrContext_ *ctx, int path_idx )
呼び出し元
stop_connected_threads の呼び出し元
呼び出し先
stop_connected_threads の呼び出し先
tcp_connect_with_timeout
static PotrSocket tcp_connect_with_timeout ( struct PotrContext_ *ctx, int path_idx )
呼び出し元
tcp_connect_with_timeout の呼び出し元
sender_connect_loop
static void sender_connect_loop ( struct PotrContext_ *ctx, int path_idx )
呼び出し元
sender_connect_loop の呼び出し元
呼び出し先
sender_connect_loop の呼び出し先
receiver_accept_loop
static void receiver_accept_loop ( struct PotrContext_ *ctx, int path_idx )
呼び出し元
receiver_accept_loop の呼び出し元
呼び出し先
receiver_accept_loop の呼び出し先
connect_thread_func
static void *connect_thread_func ( void *arg )
呼び出し元
connect_thread_func の呼び出し元
呼び出し先
connect_thread_func の呼び出し先
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[] が初期化済みであること。
引数
- ctx [in,out] セッションコンテキストへのポインタ。
戻り値
成功時は POTR_SUCCESS、失敗時は POTR_ERROR を返します。
呼び出し元
potr_connect_thread_start の呼び出し元
呼び出し先
potr_connect_thread_start の呼び出し先
potr_connect_thread_stop
void potr_connect_thread_stop ( struct PotrContext_ *ctx )
TCP 接続管理スレッドを停止します。
- connect_thread_running[i] フラグを全 path クリアして停止を通知する。
- tcp_state_cv をブロードキャストして reconnect sleep を中断する。
- tcp_listen_sock[i] (RECEIVER) を全 path クローズして accept ブロックを解除する。
- tcp_conn_fd[i] を全 path クローズして recv ループをブロック解除する。
- connect_thread[i] の終了を全 path 待機する。
- 送信スレッドを停止する (全 path join 後)。 依存スレッド (recv/health) のクリーンアップは各 connect_thread 内で行われる。
引数
- ctx [in,out] セッションコンテキストへのポインタ。
呼び出し元
potr_connect_thread_stop の呼び出し元
呼び出し先
potr_connect_thread_stop の呼び出し先
変数
s_connect_args
static ConnectArg[POTR_MAX_PATH] s_connect_args;
定数、マクロ
TCP_SESSION_NEW
#define TCP_SESSION_NEW ( 1) /* 新セッション (または初回接続) */
TCP_SESSION_SAME
#define TCP_SESSION_SAME ( 0) /* 同一セッション */
TCP_SESSION_OLD
#define TCP_SESSION_OLD (-1) /* 旧セッション (破棄すべき) */
クラス/構造体
ConnectArg
struct ConnectArg {
struct PotrContext_ *ctx;
int path_idx;
int _pad;
}
コラボレーション図
ConnectArg のコラボレーション図
属性
ctx
struct PotrContext_ *ctx;
path_idx
_pad