非同期送信スレッドの実装。
送信キュー (PotrSendQueue) からペイロードエレメントを取り出して 外側パケット (POTR_FLAG_DATA) を構築し sendto を呼び出す送信スレッド。
potrOpenService (POTR_ROLE_SENDER) 時に起動し、potrCloseService 時に停止します。
potrSend の flags 引数の値によらず常に起動しており、 ノンブロッキング送信 (POTR_SEND_BLOCKING なし) 時のみキューが使用されます。
c-modernization-kit sample team
1.0.0
2026/03/08
すべてのデータパケットはパックコンテナ形式で送受信します。
再送・順序整列の単位は外側パケット (UDP datagram) であり、
通番は本スレッドが外側パケットを構築する際に付与します。
送信ウィンドウ (ctx->send_window) への登録も本スレッドが行います。
POTR_MAX_PAYLOAD - POTR_PAYLOAD_ELEM_HDR_SIZE 以下のフラグメントが 複数キューに滞留している場合、送信スレッドが 1 つの外側パケットに まとめて送信します。
以下の場合は単体 (ペイロードエレメント 1 件) のコンテナとして送信します。
Copyright (C) CompanyName, Ltd. 2026. All rights reserved.
static uint64_t get_ms ( void )static void append_payload_elem ( uint8_t *packed_buf, size_t *packed_len, const PotrPayloadElem *entry )static int tcp_send_all ( PotrSocket fd, PotrMutex *mtx, const uint8_t *buf, size_t len )static void flush_packed ( struct PotrContext_ *ctx, size_t packed_len )static void flush_packed_peer ( struct PotrContext_ *ctx, PotrPeerContext *peer, size_t packed_len )static void send_packed_peer_mode ( struct PotrContext_ *ctx, PotrPayloadElem *first )static void *send_thread_func ( void *arg )int potr_send_thread_start ( struct PotrContext_ *ctx )void potr_send_thread_stop ( struct PotrContext_ *ctx )