porter/libsrc/porter/thread/potrRecvThread.c

1 ファイル

1.1 porter/libsrc/porter/thread/potrRecvThread.c

受信スレッドモジュール。

1.1.1 作者

c-modernization-kit sample team

1.1.2 バージョン

1.0.0

1.1.3 日付

2026/03/04

1.1.4 著作権

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

2 関数

2.1 get_ms

static uint64_t get_ms ( void )

2.2 recv_deliver

static void recv_deliver ( struct PotrContext_ *ctx, const uint8_t *payload, size_t payload_len, int compressed )

2.3 send_nack

static void send_nack ( struct PotrContext_ *ctx, uint32_t nack_seq )

2.4 send_ping_reply

static void send_ping_reply ( struct PotrContext_ *ctx, uint32_t req_seq_num )

2.5 raw_session_disconnect

static void raw_session_disconnect ( struct PotrContext_ *ctx )

2.6 n1_send_nack

static void n1_send_nack ( struct PotrContext_ *ctx, PotrPeerContext *peer, uint32_t nack_seq )

2.7 n1_send_reject

static void n1_send_reject ( struct PotrContext_ *ctx, PotrPeerContext *peer, uint32_t seq_num )

2.8 n1_send_ping_reply

static void n1_send_ping_reply ( struct PotrContext_ *ctx, PotrPeerContext *peer, uint32_t req_seq_num )

2.9 n1_reorder_gap_ready

static int n1_reorder_gap_ready ( PotrPeerContext *peer, uint32_t nack_num )

2.10 n1_notify_health_alive

static void n1_notify_health_alive ( struct PotrContext_ *ctx, PotrPeerContext *peer )

2.11 n1_recv_deliver

static void n1_recv_deliver ( struct PotrContext_ *ctx, PotrPeerContext *peer, const uint8_t *payload, size_t payload_len, int compressed )

2.12 n1_deliver_payload_elem

static void n1_deliver_payload_elem ( struct PotrContext_ *ctx, PotrPeerContext *peer, const PotrPacket *elem )

2.13 n1_drain_recv_window

static void n1_drain_recv_window ( struct PotrContext_ *ctx, PotrPeerContext *peer )

2.14 n1_process_outer_pkt

static void n1_process_outer_pkt ( struct PotrContext_ *ctx, PotrPeerContext *peer, const PotrPacket *pkt )

2.15 n1_check_and_update_session

static int n1_check_and_update_session ( struct PotrContext_ *ctx, PotrPeerContext *peer, const PotrPacket *pkt )

2.16 n1_update_path_recv

static void n1_update_path_recv ( PotrPeerContext *peer, const struct sockaddr_in *sender_addr, int path_idx )

2.17 n1_check_health_timeout

static void n1_check_health_timeout ( struct PotrContext_ *ctx )

2.18 check_src_addr

static int check_src_addr ( const struct PotrContext_ *ctx, const struct sockaddr_in *sender )

2.19 check_and_update_session

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

2.20 get_ms_mono

static uint64_t get_ms_mono ( void )

2.21 get_monotonic

static void get_monotonic ( int64_t *tv_sec, int32_t *tv_nsec )

2.22 update_path_recv

static void update_path_recv ( struct PotrContext_ *ctx, int path_idx, const struct sockaddr_in *sender )

2.23 notify_health_alive

static void notify_health_alive ( struct PotrContext_ *ctx )

2.24 check_health_timeout

static void check_health_timeout ( struct PotrContext_ *ctx )

2.25 reorder_gap_ready

static int reorder_gap_ready ( struct PotrContext_ *ctx, uint32_t nack_num )

2.26 check_reorder_timeout

static void check_reorder_timeout ( struct PotrContext_ *ctx )

2.27 send_reject

static void send_reject ( struct PotrContext_ *ctx, uint32_t seq_num )

2.28 deliver_payload_elem

static void deliver_payload_elem ( struct PotrContext_ *ctx, const PotrPacket *elem )

2.29 drain_recv_window

static void drain_recv_window ( struct PotrContext_ *ctx )

2.30 process_outer_pkt

static void process_outer_pkt ( struct PotrContext_ *ctx, const PotrPacket *pkt )

2.31 recv_thread_func

static void *recv_thread_func ( void *arg )

2.32 tcp_wait_readable

static int tcp_wait_readable ( PotrSocket fd, uint32_t wait_ms )

2.33 tcp_read_all

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

2.34 notify_connected_tcp

static void notify_connected_tcp ( struct PotrContext_ *ctx )

2.35 tcp_send_all_raw

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

2.36 tcp_send_ping_reply

static void tcp_send_ping_reply ( struct PotrContext_ *ctx, int path_idx, uint32_t req_seq_num )

2.37 tcp_recv_thread_func

static void *tcp_recv_thread_func ( void *arg )

2.38 comm_recv_thread_start

int comm_recv_thread_start ( struct PotrContext_ *ctx )

非 TCP 受信スレッドを起動します。

2.38.1 引数

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

2.38.2 戻り値

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

2.39 comm_recv_thread_stop

int comm_recv_thread_stop ( struct PotrContext_ *ctx )

非 TCP 受信スレッドを停止します。

2.39.1 引数

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

2.39.2 戻り値

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

2.40 tcp_recv_thread_start

int tcp_recv_thread_start ( struct PotrContext_ *ctx, int path_idx )

TCP 受信スレッドを path ごとに起動します。

2.40.1 引数

  • ctx [in,out] セッションコンテキストへのポインタ。
  • path_idx [in] パスインデックス (0 ~ n_path-1)。

2.40.2 戻り値

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

2.41 tcp_recv_thread_stop

int tcp_recv_thread_stop ( struct PotrContext_ *ctx, int path_idx )

TCP 受信スレッドの終了を待機します。

スレッドの停止はソケットクローズ (connect スレッド側) で行います。 本関数は join のみを担当します。

2.41.1 引数

  • ctx [in,out] セッションコンテキストへのポインタ。
  • path_idx [in] パスインデックス (0 ~ n_path-1)。

2.41.2 戻り値

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

3 変数

3.1 s_tcp_recv_args

static TcpRecvArg[POTR_MAX_PATH] s_tcp_recv_args;

4 定数、マクロ

4.1 POTR_MUTEX_LOCK_LOCAL

#define POTR_MUTEX_LOCK_LOCAL ( m )
    pthread_mutex_lock(m)

4.2 POTR_MUTEX_UNLOCK_LOCAL

#define POTR_MUTEX_UNLOCK_LOCAL ( m )
    pthread_mutex_unlock(m)

4.3 POTR_NACK_DEDUP_MS

#define POTR_NACK_DEDUP_MS 200U

NACK 重複抑制の時間窓 (ミリ秒)。この時間内の同一 ack_num の NACK は破棄する。

5 クラス/構造体

5.1 TcpRecvArg

struct TcpRecvArg {
    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;