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

送信者の実装例

#include "porter.h"
int main(void) {
PotrHandle handle;
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 を指定 */
return 0;
}
#define POTR_PEER_NA
ピア ID 未割当を示す予約値。 1:1 モードのコールバックで渡される (ピアの概念がない)。 potrSend() に N:1 モードで指定した場合はエラーを返す。
#define POTR_SEND_BLOCKING
ブロッキング送信を行います。0 を指定するとノンブロッキング送信を行います。
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
送信者。

テストコマンド

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

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

ドキュメント一覧

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