GameNetworkingSockets Versions Save

Reliable & unreliable messages over UDP. Robust message fragmentation & reassembly. P2P networking / NAT traversal. Encryption.

v1.4.1

1 year ago

Added a native ICE client, so P2P can be done without WebRTC. This client is beta and is not enabled by default, unless WebRTC support is disabled. The client does not currently support TURN.

Improvements and bugfixes:

  • Fix protocol bug in malicious sender protection, that could cause asserts and possibly dropped reliable messages if packet loss and latency were both extremely high.
  • Polling will now use epoll on supported platforms (e.g. linux).
  • IPv6 parsing now supports dotted-decimal-style IPv4-mapped IPv6 addresses, e.g. ::ffff:123.45.67.89
  • Fix deadlock if API calls were made from custom P2P callbacks that needed to lookup a connection by handle
  • Public headers no longer #define POSIX, which conflicts with other libraries
  • Improvements to platform detection and compatibility on various console platforms

No public interfaces were changed

v1.4.0

2 years ago

Version 1.4.0 adds support for multiple lanes, improves compliance with vcpkg best practices, and has numerous smaller bugfixes and improvements.

This brings the library in sync with the Steamworks SDK version 153a.

Multi-lane support

"Lanes" can be used to control head-of-line blocking behaviour. You can control the priority level of each lane and how bandwidth should be shared between different lanes.

Lanes are similar to what QUIC calls "streams", and what other networking APIs call "channels".

See ISteamNetworkingSockets::ConfigureConnectionLanes for details.

Misc bugfixes / improvements

  • Fixed bug setting the connection userdata via the config var k_ESteamNetworkingConfig_ConnectionUserData, which is necessary when setting it at connection creation.
  • Simplified iteration of configuration values and controlling when to list "dev" values.
  • Added configuration values to configure TURN servers for use by WebRTC
  • Improved handling of closing connections in the linger state that did not need to linger.
  • Attempt to clean up connections on library shutdown that were left open or in the linger state.
  • Added several more tests
  • You can now build the cert tool by passing -DBUILD_TOOLS=ON to cmake
  • Improved cmake files, manifests, and build instructions to improve compliance with vcpkg best practices. (Some work still remains in this area. If you are a cmake/vcpkg expert, please help!)
  • Added a test/example project that shows how to pull in this library using vcpkg, without fetching or compiling the code directly.
  • Removed a bunch of declarations for Steam internal things from the headers
  • Added a CI build for windows on github

Other changes

  • The "FakeIP" framework was added to the Steamworks SDK. That feature requires Steam backend support and is not supported in this opensource code, but the declarations are present in the header.
  • GetQuickConnectionStatus renamed to GetConnectionRealTimeStatus and now can return information about the status of each outbound lane. SteamNetworkingQuickConnectionStatus was also renamed to SteamNetConnectionRealTimeStatus_t.

v1.3.0

2 years ago

Major changes

Performance improvements

Implemented a fine-grained locking strategy to greatly reduce lock contention, especially if API calls are made from multiple threads. (See issue #50.)

Added ISteamNetworkingMessages

This interface is primarily useful for porting existing code that expects to be able to make ad-hoc sendto/recvfrom calls to arbitrary addresses, and does not consistently use the abstraction of a "connection".

Other improvements

  • Header files are now compatible with Steamworks SDK headers. You can easily switch between using the Steamworks SDK and a standalone library for the networking interfaces in this library, even making the determination at runtime.
  • Added a mechanism to customize (most) memory allocations.
  • Numerous bugfixes related to P2P and ICE

Compatibility

Some interfaces were renamed related to custom P2P signaling. Otherwise there were no major API-breaking changes. This update is compatible with the Steamworks SDK 1.51 release.

v1.2.0

3 years ago
  • Added support for peer-to-peer connections.
    • NAT-punched connections, using google webrtc's ICE implementation.
    • Plugin architecture for signaling service.
    • Symmetric connect mode
    • For full details, see README_P2P.md
  • Reworked callback mechanism, improving compatibility with Steamworks version.
  • Easier Windows configuration using vcpkg
  • Numerous bugfixes, etc.

This update corresponds to the Steamworks SDK 1.50 release.

v1.1.0

4 years ago

Changes from v1.0:

  • Added poll groups
  • Added method to send multiple messages in a single API call without copying the message payload
  • Added methods to set options at socket creation time, or set multiple options atomically
  • Reworked flat interface
  • Libsodium support
  • Numerous bugfixes, etc.

This update corresponds to the Steamworks SDK 1.48 release.

1.0.0

5 years ago

This is the first release of the GameNetworkingSockets library, coinciding with the first available version in the Steamworks SDK.

Version 1.0.x will maintain compatiblity with SteamworksSDK 1.44.