No description
  • PureBasic 100%
Find a file
2026-03-16 14:47:32 +01:00
net_doc Neustes V5.3 Feature inkl. Testuite die bestanden ist 125/125 2026-03-14 17:17:40 +01:00
net_lib Hotfix TLS 2026-03-16 14:47:32 +01:00
net_tests Der Test hatte eine falsche Annahme: AcquireQUICConnection sollte synchron fehlschlagen, aber QUIC Connect ist by-design asynchron. 2026-03-14 17:28:11 +01:00
.gitignore Initial commit 2026-03-14 13:48:04 +01:00
LICENSE Initial commit 2026-03-14 13:48:04 +01:00
README.md Neustes V5.3 Feature inkl. Testuite die bestanden ist 125/125 2026-03-14 17:17:40 +01:00

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() mit UDP_SEGMENT Control-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 MulticastJoinGroup() / LeaveGroup() via IP_ADD_MEMBERSHIP
  • IPv6 MulticastJoinGroupIPv6() / LeaveGroupIPv6() via IPV6_JOIN_GROUP
  • Source-Specific Multicast (SSM)JoinSourceGroup() via IP_ADD_SOURCE_MEMBERSHIP
  • Multicast-Optionen — TTL, Hop Limit, Loopback, Interface-Auswahl
  • BroadcastSO_BROADCAST, Limited Broadcast (255.255.255.255), Directed Broadcast
  • Standalone SocketsCreateSocket() 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() und Cleanup()
  • 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.pbi verbindet 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() mit UDP_SEGMENT Batch-Sends, recvmsg() GRO, Runtime Feature-Detection
  • ECN (Explicit Congestion Notification) — IP_TOS/IPV6_TCLASS setzen, 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_BROADCAST Socket-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) — .local Service-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

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.