udx is reliable, multiplex, and congestion controlled streams over udp.
It's written in C99 and depends on libuv.
It is pre-alpha wip (there be dragons), but at a stage where it's safe for developers to poke at.
The main purpose is to be a building block for P2P networking. It therefore doesn't come with any handshaking protocol, encryption, and things like that - just reliable, fast, streams.
TODO
npm install udx-native
Two build setups are available: A GYP build and a CMake build.
The GYP build is used for building a dynamic library for use in Node.js.
node-gyp configure
node-gyp build
The above commands are run as part of npm install
.
The CMake build is used for building static and dynamic libraries for use outside of Node.js.
cmake -S . -B build
cmake --build build
When debugging native code, make sure to configure a debug build:
# GYP
node-gyp configure --debug
# CMake
cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug
To diagnose and debug memory errors, such as leaks and use-after-free, the collection of sanitizers provided by LLVM are recommended. The sanitizers can be enabled by passing additional CFLAGS
and/or LDFLAGS
to the CMake or GYP build:
# GYP
CFLAGS=<...> LDFLAGS=<...> node-gyp build
# CMake
CFLAGS=<...> LDFLAGS=<...> cmake -S . -B build
To read more about the various sanitizers and how to use them, see:
- https://clang.llvm.org/docs/AddressSanitizer.html
- https://clang.llvm.org/docs/MemorySanitizer.html
- https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
- https://clang.llvm.org/docs/LeakSanitizer.html
⚠️ LeakSanitizer is still experimental and currently requires a newer version of LLVM on macOS. If using Homebrew,brew install llvm
andCC=/usr/local/opt/llvm/bin/clang
should be sufficient.
MIT