NativeSockets2 1.6.0

dotnet add package NativeSockets2 --version 1.6.0
                    
NuGet\Install-Package NativeSockets2 -Version 1.6.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="NativeSockets2" Version="1.6.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="NativeSockets2" Version="1.6.0" />
                    
Directory.Packages.props
<PackageReference Include="NativeSockets2" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add NativeSockets2 --version 1.6.0
                    
#r "nuget: NativeSockets2, 1.6.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package NativeSockets2@1.6.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=NativeSockets2&version=1.6.0
                    
Install as a Cake Addin
#tool nuget:?package=NativeSockets2&version=1.6.0
                    
Install as a Cake Tool

NativeSockets2

A P/Invoke wrapper over a native C UDP socket library, providing the same API as NativeSockets with a native backend.

NuGet


About

  • NativeSockets2 is a lightweight, cross‑platform library for UDP networking.
  • It is a P/Invoke wrapper around a native C library, delivering high performance through a native implementation.
  • The library exposes the exact same public API as NativeSockets, making it a drop‑in replacement.
  • Precompiled native binaries are included for all supported platforms and architectures.

Supported Platforms

  • Windows
  • Linux
  • Android
  • macOS
  • iOS
  • tvOS
  • watchOS
  • visionOS

Key Features

  • Zero garbage collection pressure
  • Same API as NativeSockets – seamless switching between managed and native backends.
  • Complete UDP support – create, bind, connect, send, receive, and poll sockets.
  • Ipv4 and Ipv6 with dual‑mode support.
  • Scatter/gather I/O – Efficient vectored send and receive operations.

Native Library Dependency

  • The NuGet package includes the native C library for all supported platforms.
  • The correct binary is loaded automatically at runtime – no extra installation or configuration is needed.
  • Just add the package and use the same API as you would with the original NativeSockets.
  • You can build binaries using GitHub Actions.

VirtualSocket

A unified socket type that automatically picks the best available backend at runtime:

  • When NativeSocketPal.IsSupported is true, VirtualSocket is backed by the native socket implementation.
  • Otherwise, it transparently falls back to System.Net.Sockets.Socket.

Key Points

  • No manual NativeSocketPal.Startup / NativeSocketPal.Cleanup calls are required – the underlying socket subsystem is managed automatically.
  • The send/receive API mirrors the native socket API and returns an IoResult (byte count plus SocketError).
  • SocketFlags are restricted: send operations honor only None and DontRoute; receive operations honor only None and Peek. Any other flags are silently ignored.
  • For vectored receive operations, truncated data is reported as IoResult.Err with SocketError.MessageSize, even when the underlying operation succeeded.

Notes

  • On the managed fallback path, a SendTo that triggers an implicit bind leaves the socket actually bound, but LocalEndPoint cannot be queried and throws. This only occurs on .NET 8 and later, because the SendTo(ReadOnlySpan<byte>, SocketFlags, SocketAddress) overload does not set the underlying _rightEndPoint field. In that state GetName reports an error even though the datagram was delivered.
  • The managed fallback path carries the overhead of System.Net.Sockets; prefer the native backend when performance matters.
  • When NativeSocketPal.IsSupported is false and the socket is non-blocking, consider polling with Poll or PollFlags before sending or receiving, because frequent SocketError.WouldBlock exceptions have a severe impact on performance.
Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.1

  • net10.0

    • No dependencies.
  • net5.0

    • No dependencies.
  • net6.0

    • No dependencies.
  • net7.0

    • No dependencies.
  • net8.0

    • No dependencies.
  • net9.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.