# 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;