受信スレッドモジュール。
c-modernization-kit sample team
1.0.0
2026/03/04
Copyright (C) CompanyName, Ltd. 2026. All rights reserved.
static uint64_t get_ms ( void )static void recv_deliver ( struct PotrContext_ *ctx, const uint8_t *payload, size_t payload_len, int compressed )static void send_nack ( struct PotrContext_ *ctx, uint32_t nack_seq )static void send_ping_reply ( struct PotrContext_ *ctx, uint32_t req_seq_num )static void raw_session_disconnect ( struct PotrContext_ *ctx )static void n1_send_nack ( struct PotrContext_ *ctx, PotrPeerContext *peer, uint32_t nack_seq )static void n1_send_reject ( struct PotrContext_ *ctx, PotrPeerContext *peer, uint32_t seq_num )static void n1_send_ping_reply ( struct PotrContext_ *ctx, PotrPeerContext *peer, uint32_t req_seq_num )static int n1_reorder_gap_ready ( PotrPeerContext *peer, uint32_t nack_num )static void n1_notify_health_alive ( struct PotrContext_ *ctx, PotrPeerContext *peer )static void n1_recv_deliver ( struct PotrContext_ *ctx, PotrPeerContext *peer, const uint8_t *payload, size_t payload_len, int compressed )static void n1_deliver_payload_elem ( struct PotrContext_ *ctx, PotrPeerContext *peer, const PotrPacket *elem )static void n1_drain_recv_window ( struct PotrContext_ *ctx, PotrPeerContext *peer )static void n1_process_outer_pkt ( struct PotrContext_ *ctx, PotrPeerContext *peer, const PotrPacket *pkt )static int n1_check_and_update_session ( struct PotrContext_ *ctx, PotrPeerContext *peer, const PotrPacket *pkt )static void n1_update_path_recv ( PotrPeerContext *peer, const struct sockaddr_in *sender_addr, int path_idx )static void n1_check_health_timeout ( struct PotrContext_ *ctx )static int check_src_addr ( const struct PotrContext_ *ctx, const struct sockaddr_in *sender )static int check_and_update_session ( struct PotrContext_ *ctx, const PotrPacket *pkt )static uint64_t get_ms_mono ( void )static void get_monotonic ( int64_t *tv_sec, int32_t *tv_nsec )static void update_path_recv ( struct PotrContext_ *ctx, int path_idx, const struct sockaddr_in *sender )static void notify_health_alive ( struct PotrContext_ *ctx )static void check_health_timeout ( struct PotrContext_ *ctx )static int reorder_gap_ready ( struct PotrContext_ *ctx, uint32_t nack_num )static void check_reorder_timeout ( struct PotrContext_ *ctx )static void send_reject ( struct PotrContext_ *ctx, uint32_t seq_num )static void deliver_payload_elem ( struct PotrContext_ *ctx, const PotrPacket *elem )static void drain_recv_window ( struct PotrContext_ *ctx )static void process_outer_pkt ( struct PotrContext_ *ctx, const PotrPacket *pkt )static void *recv_thread_func ( void *arg )static int tcp_wait_readable ( PotrSocket fd, uint32_t wait_ms )static int tcp_read_all ( PotrSocket fd, uint8_t *buf, size_t n )static void notify_connected_tcp ( struct PotrContext_ *ctx )static int tcp_send_all_raw ( PotrSocket fd, const uint8_t *buf, size_t n )static void tcp_send_ping_reply ( struct PotrContext_ *ctx, int path_idx, uint32_t req_seq_num )static void *tcp_recv_thread_func ( void *arg )int comm_recv_thread_start ( struct PotrContext_ *ctx )非 TCP 受信スレッドを起動します。
成功時は POTR_SUCCESS、失敗時は POTR_ERROR を返します。
int comm_recv_thread_stop ( struct PotrContext_ *ctx )非 TCP 受信スレッドを停止します。
成功時は POTR_SUCCESS、失敗時は POTR_ERROR を返します。
int tcp_recv_thread_start ( struct PotrContext_ *ctx, int path_idx )TCP 受信スレッドを path ごとに起動します。
成功時は POTR_SUCCESS、失敗時は POTR_ERROR を返します。
int tcp_recv_thread_stop ( struct PotrContext_ *ctx, int path_idx )TCP 受信スレッドの終了を待機します。
スレッドの停止はソケットクローズ (connect スレッド側) で行います。 本関数は join のみを担当します。
成功時は POTR_SUCCESS、失敗時は POTR_ERROR を返します。
static TcpRecvArg[POTR_MAX_PATH] s_tcp_recv_args;#define POTR_MUTEX_LOCK_LOCAL ( m )
pthread_mutex_lock(m)#define POTR_MUTEX_UNLOCK_LOCAL ( m )
pthread_mutex_unlock(m)#define POTR_NACK_DEDUP_MS 200UNACK 重複抑制の時間窓 (ミリ秒)。この時間内の同一 ack_num の NACK は破棄する。
struct TcpRecvArg {
struct PotrContext_ *ctx;
int path_idx;
int _pad;
}struct PotrContext_ *ctx;int path_idx;int _pad;