No description
- PureBasic 100%
| net_doc | ||
| net_lib | ||
| net_tests | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
NET Stack V5.3 — PureBasic Network Framework
Version: 5.3 — QUIC Performance + Multicast/Discovery
Datum: März 2026
Plattform: Linux x86_64
Sprache: PureBasic 6.x
Lizenz: Proprietär
Übersicht
Vollständiger Netzwerk-Stack für PureBasic mit nativem QUIC-Support. Von Low-Level I/O bis QUIC Transport — alles aus einem Guss.
Kennzahlen
| Metrik | Wert |
|---|---|
| Module | 14 |
| Quellcode | 20.240 Zeilen |
| Testsuite | 32 Suites, ~438 Tests |
| QUIC-Stack | 7.207 Zeilen (nativ, kein Wrapper) |
| Unterstützte Protokolle | TCP, UDP, Unix, QUIC, TLS 1.2/1.3, Multicast/Broadcast |
Module
lib/
├── atomic-ops.pbi (205 Zeilen) Lock-free atomare Operationen
├── lock-free-queue.pbi (369 Zeilen) MPMC Queue
├── NET_Core.pbi (2.574 Zeilen) Kern: Connections, Streams, I/O
├── tls-openssl.pbi (2.767 Zeilen) OpenSSL TLS 1.2/1.3 + QUIC_METHOD
├── tls-dummy.pbi (1.027 Zeilen) Test-Stub (kein echtes TLS)
├── NET_Server.pbi (1.643 Zeilen) Event-Loop Server mit epoll
├── NET_Client.pbi (974 Zeilen) Async Client + Pooling
├── quic-native.pbi (6.512 Zeilen) Nativer QUIC Stack (RFC 9000)
├── quic-perf.pbi (695 Zeilen) GSO/GRO, ECN, Pacing Primitiven
├── quic-integration.pbi (170 Zeilen) QUIC ↔ NET_Core Bootstrap
├── NET_Metrics.pbi (590 Zeilen) Prometheus Metriken
├── NET_Shaping.pbi (574 Zeilen) Token/Leaky Bucket Shaping
├── NET_Multicast.pbi (783 Zeilen) Multicast/Broadcast Transport-Primitiven
├── NET_Discovery.pbi (1.357 Zeilen) mDNS/DNS-SD Service Discovery
V5.3 — Was ist neu?
QUIC Performance (quic-perf.pbi)
- UDP GSO (Generic Segmentation Offload) —
sendmsg()mitUDP_SEGMENTControl-Message, Kernel segmentiert einen großen Buffer in N UDP-Pakete (1 Syscall statt N). Runtime Feature-Detection für Kernel 4.18+ - UDP GRO (Generic Receive Offload) —
recvmsg()mit aggregierten Paketen, weniger Syscalls beim Empfang. Automatische Aktivierung wenn Kernel es unterstützt - ECN (Explicit Congestion Notification, RFC 3168) — ECT(0) Codepoint im IP-Header, ECN-CE Feedback via Ancillary Data, Integration in Reno/Cubic Congestion Controller. CE-Markierungen triggern
_OnCongestionEvent()analog zu Packet-Loss - Pacing (Token-Bucket, RFC 9002 §7.7) — Rate = 1.25 × cwnd/RTT, integriert in
_FlushConnection(). ACKs und CONNECTION_CLOSE umgehen Pacing, Stream-Daten werden gleichmäßig über die RTT verteilt
Multicast & Broadcast (NET_Multicast.pbi)
- IPv4 Multicast —
JoinGroup()/LeaveGroup()viaIP_ADD_MEMBERSHIP - IPv6 Multicast —
JoinGroupIPv6()/LeaveGroupIPv6()viaIPV6_JOIN_GROUP - Source-Specific Multicast (SSM) —
JoinSourceGroup()viaIP_ADD_SOURCE_MEMBERSHIP - Multicast-Optionen — TTL, Hop Limit, Loopback, Interface-Auswahl
- Broadcast —
SO_BROADCAST, Limited Broadcast (255.255.255.255), Directed Broadcast - Standalone Sockets —
CreateSocket()für Discovery-Protokolle ohne NET_Server - Automatisches Group-Tracking mit Cleanup bei
DestroySocket()
Service Discovery (NET_Discovery.pbi)
- mDNS (RFC 6762) — Multicast DNS auf 224.0.0.251:5353
- DNS-SD (RFC 6763) —
AnnounceService(),BrowseServices(),ResolveService() - DNS Wire Format — Vollständiger Encoder/Decoder mit Pointer-Compression
- PTR + SRV + TXT + A Records in Announcements
- Goodbye-Pakete (TTL=0) bei
WithdrawService()undCleanup() - Browse-Callbacks — Event-basiert (#EVENT_FOUND, #EVENT_REMOVED, #EVENT_UPDATED)
- TTL-basierter Cache mit automatischem Cleanup
- Re-Announcement alle 60 Sekunden (konfigurierbares Intervall)
- Receiver-Thread für asynchronen Empfang + Maintenance-Thread für Housekeeping
V5.2 — Was ist neu?
OpenSSL 3.5+ QUIC_METHOD Integration
- QUIC_METHOD-Callbacks für die neue OpenSSL 3.5 QUIC-API
- Integration der Callbacks in
TLS_OpenSSL::CreateQUICServerContext() quic-integration.pbiverbindet QUIC_Native ↔ OpenSSL 3.5 nahtlos
QUIC Handshake Stabilität
- TLS-Message-Boundary-Parsing:
SSL_do_handshake()wird erst aufgerufen wenn eine komplette TLS Message im Stream-Buffer vorliegt - Stream-Buffer Akkumulation für Crypto-Daten im Pull-Modell
- ERR_clear_error Cleanup für saubere OpenSSL State-Machine
- EVP_MD_get_size für korrekte Digest-Größenbestimmung
Bugfixes & Robustheit
- C-int Rückgabewerte (
.l/ 32-bit signed) für korrekte Sign-Extension bei OpenSSL-Funktionen - Original-DCID wird im CID-Lookup korrekt registriert und entfernt
- Original-DCID in Transport-Params für Client-seitige Validierung
Quick Start
1. TCP Echo-Server (3 Zeilen Logik)
XIncludeFile "lib/atomic-ops.pbi"
XIncludeFile "lib/lock-free-queue.pbi"
XIncludeFile "lib/NET_Core.pbi"
XIncludeFile "lib/tls-openssl.pbi"
XIncludeFile "lib/NET_Server.pbi"
Procedure OnData(conn.i, *buf, len.i) : NET_Core::Send(conn, *buf, len) : EndProcedure
NET_Server::Init()
NET_Core::SetCallbackData(@OnData())
Define c.NET_Core::ListenerConfig : c\bind_ip="0.0.0.0" : c\port=9000
c\transport_type=1 : c\flags=$05
NET_Server::AddListener(@c)
NET_Server::Run()
2. QUIC Server
; + quic-native.pbi + quic-integration.pbi
QUIC_Integration::Setup()
QUIC_Native::SetCallbackStreamData(@OnStreamData())
NET_Server::AddQUICListener("0.0.0.0", 4433, "cert.pem", "key.pem")
NET_Server::Run()
3. QUIC Client
QUIC_Integration::SetupClient()
conn = NET_Client::ConnectQUICByHostname("example.com", 443)
stream = NET_Client::QUICOpenStream(conn, #True)
NET_Client::QUICStreamSend(conn, stream, @data, len, #True)
Verzeichnisstruktur
NET-V5.2/
├── README.md Diese Datei
├── lib/ Alle Module (.pbi)
├── doc/
│ ├── API-Referenz.md Vollständige API-Dokumentation
│ └── Demo-Benutzung.md Codebeispiele & Tutorials
├── test/
│ └── testsuite-v5.2.pb Testsuite (32 Suites)
└── examples/ (Für eigene Beispiele)
Abhängigkeiten
- PureBasic 6.x (Linux x86_64, C-Backend)
- OpenSSL 1.1, 3.x oder 3.5+ (libcrypto.so + libssl.so) — QUIC_METHOD ab OpenSSL 3.5
- Linux Kernel 3.9+ (epoll, sendfile)
OpenSSL installieren
# Debian/Ubuntu
sudo apt install libssl-dev
# Fedora/RHEL
sudo dnf install openssl-devel
# Arch
sudo pacman -S openssl
# quictls (für QUIC_METHOD Support vor OpenSSL 3.5)
# → Auto-Detection: libssl-quic.so.3, /opt/quictls, /usr/local/quictls
Kompilieren & Testen
cd NET-V5.2/test
pbcompiler testsuite-v5.2.pb -e testsuite-v5.2
./testsuite-v5.2
Versionsverlauf
| Version | Datum | Highlights |
|---|---|---|
| 1.0 | 2025 | TCP Server, epoll, Lock-Free Queue |
| 2.0 | 2025 | TLS_OpenSSL, Atomic Ops |
| 3.0 | 2025 | HTTP Server, Client, Multi-Listener |
| 3.1 | 2025 | TLS 1.3, Session Tickets, HSTS |
| 4.0 | 2025 | IPv6, Unix Domain Sockets, DNS |
| 4.2 | 2025 | Connection Pooling, Rate Limiting |
| 5.0 | 2026 | Stream Multiplexing, Certificate Validation, OCSP |
| 5.1 | 2026 | Native QUIC Stack, HTTP/3-Ready |
| 5.2 | 2026 | OpenSSL 3.5 QUIC_METHOD, TLS-Message-Boundary-Parsing, Bugfixes |
| 5.3 | 2026 | GSO/GRO, ECN, Pacing, Multicast/Broadcast, mDNS/DNS-SD |
Roadmap
V5.3 — QUIC Performance + Multicast/Discovery ✅
A) QUIC Performance & Stabilität
- UDP GSO/GRO (Kernel 4.18+) —
sendmsg()mitUDP_SEGMENTBatch-Sends,recvmsg()GRO, Runtime Feature-Detection - ECN (Explicit Congestion Notification) —
IP_TOS/IPV6_TCLASSsetzen, ECN-Bits via Ancillary Data lesen, Integration in Reno/Cubic CC - QUIC Pacing — Token-Bucket/Timer-basierter Paket-Scheduler in
_FlushConnection(), gleichmässige Verteilung über RTT
B) Multicast, Broadcast & Service Discovery
- NET_Multicast.pbi — Multicast-Gruppenverwaltung (Transport-Primitiven)
JoinGroup(listener_id, group_ip, interface)/LeaveGroup()SetMulticastTTL(),SetMulticastLoopback(),SetMulticastInterface()- IPv4 (
IP_ADD_MEMBERSHIP) + IPv6 (IPV6_JOIN_GROUP) Support - Source-Specific Multicast (SSM) via
IP_ADD_SOURCE_MEMBERSHIP
- Broadcast-Support in NET_Server/NET_Client
SO_BROADCASTSocket-Option, Senden an 255.255.255.255 / Subnet-Broadcast- Directed Broadcast für gezielte Subnet-Adressierung
- NET_Discovery.pbi — Service Discovery (auf Multicast/Broadcast aufbauend)
- mDNS (Multicast DNS, RFC 6762) —
.localService-Auflösung - DNS-SD (DNS-Based Service Discovery, RFC 6763) — Service-Typen registrieren/finden
AnnounceService(name, type, port)/BrowseServices(type, *callback)ResolveService(name, type)→ IP + Port- Automatische Goodbye-Pakete bei Shutdown
- TTL-basiertes Cache-Management mit Re-Announcement
- mDNS (Multicast DNS, RFC 6762) —
V6.0 — Cross-Platform (Windows + macOS)
- Platform-Abstraction-Layer für I/O Multiplexer (epoll → IOCP / kqueue)
- Winsock-Kompatibilität (Socket-API, Overlapped I/O)
- IOCP Event-Loop für Windows (Completion-based statt Readiness-based)
- kqueue Event-Loop für macOS / FreeBSD
- Plattform-unabhängige Atomics (GCC Builtins / MSVC Intrinsics)
- OpenSSL-Pfade pro Plattform (Homebrew, vcpkg, System)
Protokoll-Stack (separates Projekt)
HTTP/3 (QPACK, Frame Layer, Server/Client) und WebSocket (TCP + QUIC) sind Protokoll-Layer und werden im HTTP-Protokoll-Stack entwickelt — nicht im NET Transport-Stack.