Document of c-modernization-kit (porter) 1.0.0

Loading...
Searching...
No Matches
porter Directory Reference
Directory dependency graph for porter:

## Directories
| docs
| include
| libsrc
| src

## Detailed Description

porter は UDP/IP および TCP/IP をサポートするクロスプラットフォーム (Linux / Windows) 通信ライブラリです。 1:1 (ユニキャスト) ・1:N (マルチキャスト・ブロードキャスト) の UDP 通信に加え、 TCP による信頼性の高い接続型通信 (1:1 および双方向) もサポートします。 スライディングウィンドウによる NACK ベース再送制御、ヘルスチェック、データ圧縮を提供します。

# 特徴

機能 | 詳細
--- | ---
トランスポート | UDP/IPv4、TCP/IPv4
通信モデル | ユニキャスト / マルチキャスト / ブロードキャスト (UDP) TCP 接続型通信 (tcp / tcp_bidir)、双方向ユニキャスト (unicast_bidir)
通信モード | 通常モード: NACK ベース再送制御・スライディングウィンドウ (最大 256 スロット) RAW モード (*_raw): 再送なし・ベストエフォート。ギャップ検出時に DISCONNECTED を発行
リオーダー吸収 | reorder_timeout_ms でギャップ検出後の待機時間を設定。待機中に追い越しパケットが届けば NACK / DISCONNECT を発行しない (通常・RAW モード共通)。マルチキャスト/ブロードキャスト通常モードでは NACK 送出タイミングを 100〜200% の範囲で自動ジッタ分散し NACK implosion を抑制
データ圧縮 | raw DEFLATE (Linux: zlib、Windows: Compression API)
フラグメント化 | 最大 65,535 バイトのメッセージを自動分割・結合
ヘルスチェック | 定周期 PING による疎通確認と切断検知 (通常・RAW モード共通、設定に従う)
マルチパス | 最大 4 経路の並列送信
プラットフォーム | Linux、Windows 両プラットフォーム対応

# クイックスタート

## 設定ファイルの準備

porter は INI 形式の設定ファイルでサービスを定義します。詳細は 設定ファイル仕様 を参照してください。

[global]
window_size = 16
health_interval_ms = 3000
health_timeout_ms = 10000
[service.1001]
type = unicast
src_addr = 192.168.1.20
dst_addr = 192.168.1.10
dst_port = 5001

## 受信者の実装例

#include "porter.h"
void on_event(int64_t service_id, PotrEvent event, const void *data, size_t len) {
switch (event) {
case POTR_EVENT_CONNECTED:
/* 送信者からの最初のパケット到着 */
break;
case POTR_EVENT_DISCONNECTED:
/* タイムアウト / FIN / REJECT 受信 / RAW モードのギャップ検出 */
break;
case POTR_EVENT_DATA:
/* データ受信: data[0..len-1] に内容 */
break;
}
}
int main(void) {
PotrHandle handle;
potrLogConfig(POTR_TRACE_INFO, NULL, 1);
potrOpenService("porter-services.conf", 1001, POTR_ROLE_RECEIVER, on_event, &handle);
/* ... 待機 ... */
potrCloseService(handle);
return 0;
}
porter.h
通信ライブラリ (動的リンク用) のヘッダーファイル。
potrLogConfig
POTR_EXPORT int POTR_API potrLogConfig(PotrLogLevel level, const char *log_file, int console)
ロガーを設定します。
Definition potrLog.c:72
potrOpenService
POTR_EXPORT int POTR_API potrOpenService(const PotrGlobalConfig *global, const PotrServiceDef *service, PotrRole role, PotrRecvCallback callback, PotrHandle *handle)
設定構造体から指定サービスを開きます。
Definition potrOpenService.c:445
potrCloseService
POTR_EXPORT int POTR_API potrCloseService(PotrHandle handle)
サービスを閉じます。
Definition potrCloseService.c:120
POTR_TRACE_INFO
@ POTR_TRACE_INFO
情報。TRACE_LV_INFO (3) と同値。
Definition porter_type.h:337
PotrHandle
struct PotrContext_ * PotrHandle
セッションハンドル。
Definition porter_type.h:238
POTR_ROLE_RECEIVER
@ POTR_ROLE_RECEIVER
受信者。
Definition porter_type.h:116
PotrEvent
PotrEvent
受信イベント種別。
Definition porter_type.h:284
POTR_EVENT_DISCONNECTED
@ POTR_EVENT_DISCONNECTED
切断を検知 (タイムアウト / FIN 受信 / REJECT 受信)。data=NULL, len=0。
Definition porter_type.h:287
POTR_EVENT_CONNECTED
@ POTR_EVENT_CONNECTED
送信者からの疎通を初検知 or 復帰。data=NULL, len=0。
Definition porter_type.h:286
POTR_EVENT_DATA
@ POTR_EVENT_DATA
データ受信。data/len に内容が格納される。
Definition porter_type.h:285
main
int main(int argc, char *argv[])
メインエントリーポイント。
Definition recv.c:369

## 送信者の実装例

#include "porter.h"
int main(void) {
PotrHandle handle;
potrLogConfig(POTR_TRACE_INFO, NULL, 1);
potrOpenService("porter-services.conf", 1001, POTR_ROLE_SENDER, NULL, &handle);
const char *msg = "Hello, porter!";
potrSend(handle, POTR_PEER_NA, msg, strlen(msg), POTR_SEND_BLOCKING); /* 圧縮なし・ブロッキング送信。1:1 通信では peer_id に POTR_PEER_NA を指定 */
potrCloseService(handle);
return 0;
}
POTR_PEER_NA
#define POTR_PEER_NA
ピア ID 未割当を示す予約値。 1:1 モードのコールバックで渡される (ピアの概念がない)。 potrSend() に N:1 モードで指定した場合はエラーを返す。
Definition porter_type.h:258
POTR_SEND_BLOCKING
#define POTR_SEND_BLOCKING
ブロッキング送信を行います。0 を指定するとノンブロッキング送信を行います。
Definition porter_const.h:24
potrSend
POTR_EXPORT int POTR_API potrSend(PotrHandle handle, PotrPeerId peer_id, const void *data, size_t len, int flags)
メッセージを送信します。
Definition potrSend.c:88
POTR_ROLE_SENDER
@ POTR_ROLE_SENDER
送信者。
Definition porter_type.h:115

## テストコマンド

テストコマンドで動作を確認できます。

# 受信側 (別ターミナルで先に起動)
recv -l TRACE ../sample-config/porter-services.conf 1001
# 送信側
send -l TRACE ../sample-config/porter-services.conf 1001

# ドキュメント一覧

ドキュメント | 内容
--- | ---
アーキテクチャ設計 | スレッド構成・コンポーネント・データフロー
プロトコル仕様 | パケット構造・再送制御・ウィンドウ・圧縮
設定ファイル仕様 | INI 形式設定・通信種別・マルチパス
シーケンス | 送受信・再送・ヘルスチェックのシーケンス図
公開 API 仕様 | API リファレンス・スレッドセーフティ
セキュリティレビュー | セキュリティレビュー結果と対処方針