22#ifndef POTR_SEND_QUEUE_H
23#define POTR_SEND_QUEUE_H
95 const void *payload, uint16_t payload_len);
98 const void *payload, uint16_t payload_len,
104 uint32_t timeout_ms);
uint32_t PotrPeerId
ピア識別子。
int potr_send_queue_init(PotrSendQueue *q, size_t depth, uint16_t max_payload)
int potr_send_queue_push(PotrSendQueue *q, PotrPeerId peer_id, uint16_t flags, const void *payload, uint16_t payload_len)
void potr_send_queue_complete(PotrSendQueue *q)
int potr_send_queue_pop(PotrSendQueue *q, PotrPayloadElem *out, volatile int *running)
int potr_send_queue_peek_timed(PotrSendQueue *q, PotrPayloadElem *out, uint32_t timeout_ms)
pthread_cond_t PotrCondVar
int potr_send_queue_peek(PotrSendQueue *q, PotrPayloadElem *out)
void potr_send_queue_shutdown(PotrSendQueue *q)
int potr_send_queue_try_pop(PotrSendQueue *q, PotrPayloadElem *out)
pthread_mutex_t PotrMutex
void potr_send_queue_destroy(PotrSendQueue *q)
int potr_send_queue_push_wait(PotrSendQueue *q, PotrPeerId peer_id, uint16_t flags, const void *payload, uint16_t payload_len, volatile int *running)
void potr_send_queue_wait_drained(PotrSendQueue *q)
送信キューの 1 エントリ。ペイロードエレメント 1 個分のデータを保持する。
uint16_t payload_len
ペイロード長 (バイト)。
uint16_t flags
ペイロードエレメントフラグ (MORE_FRAG, COMPRESSED など)。
uint8_t * payload
ペイロードデータへのポインタ (プールスロット内を指す)。
PotrPeerId peer_id
送信先ピア識別子 (N:1 モード用。1:1 モードでは 0)。
size_t depth
キュー容量 (エントリ数)。
size_t inflight
sendto 実行中エントリ数。
PotrCondVar not_empty
count > 0 になったことを通知する条件変数。
PotrCondVar drained
count == 0 && inflight == 0 を通知する条件変数。
size_t head
読み出し位置 (送信スレッドが使用)。
size_t tail
書き込み位置 (potrSend 呼び出し元が使用)。
PotrCondVar not_full
count + inflight < depth になったことを通知する条件変数。
uint8_t * payload_pool
ペイロードプール (動的確保。depth × max_payload バイト)。
PotrPayloadElem * entries
ペイロードエレメントバッファ (動的確保。depth 要素)。
static volatile sig_atomic_t running