Skip to content

Releases: nanomsg/nng

2.0.0 Alpha 3 Release

10 Jan 07:50
73f50e2
Compare
Choose a tag to compare
2.0.0 Alpha 3 Release Pre-release
Pre-release

This is the 3rd Alpha Release of NNG 2.0, and it represents a lot of change in the HTTP support.

The main thing is that the APIs for HTTP have totally changed, and they should be much easier to use now. There is no easy conversion guidance, although simple server side applications should convert without too much difficulty.

Header files have changed for some things to make them easier as well, and a number of additional allocations have been removed.

Substantial progress on the mdbook conversion is here too.

There's still a lot more to do, but hopefully this builds enthusiasm!

Version 1.10.0 Release

05 Jan 05:24
82b8912
Compare
Choose a tag to compare

This release fixes some bugs, and adds some APIs that are available in the development 2.0 release,
in order to facilitate migration to 2.0 (which is not released yet.)

At present we have no concrete plans for future releases on the 1.x stable branch, but will release any critically urgent fixes as needed.

What's Changed

Full Changelog: v1.9.0...v1.10

2.0.0 Alpha 2 Release

01 Jan 02:12
f0a6556
Compare
Choose a tag to compare
2.0.0 Alpha 2 Release Pre-release
Pre-release

Happy New Year! It's still 2024 as I write this, in my location, but not in others. And not for long!

This release has fixes for various things over alpha 2.0.0 alpha 1. Some notable improvements:

  • Introduction of support for socket activation -- see NNG_OPT_LISTEN_FD available for TCP, TLS, and on POSIX/Linux, IPC transports and streams layers.
  • Horizontal scalability of pollers -- epoll, kqueue, port events, and poll all now engage multiple threads, giving the opportunity to engage with multiple CPU cores. This should have a marked improvement on larger systems.
  • More allocations removed, more dereferences removed.
  • Hot code paths no have eliminated at least one pair of lock entry/exits vs alpha 1. (Which was already improved.)
  • More of documentation is converted.
  • Test suites are more reliable (pesky EADDRINUSE bugs are hopefully squashed now)

The nng_close function is renamed to nng_sock_close, as a heads up... so pay attention to the migration guide! (There is a macro, NNG1_MIGRATION that can be set to provide a macro to aid in transition.

v2.0.0-alpha.1

22 Dec 18:08
9ac2c5a
Compare
Choose a tag to compare
v2.0.0-alpha.1 Pre-release
Pre-release

Summary

This is the first "alpha" release of 2.0.0. Note that this is very much a work in progress, and stability is not guaranteed.
There will be more breaking changes coming. But to help with early adoption and testing, this is posted.

Reminder: If you want stability or need to use in production, please consider the "stable" branch instead.

The main changes here involve these major areas:

  1. New UDP transport
  2. Performance enhancements - fewer allocations, fewer locks -- this is an ongoing effort
  3. Documentation changing to mdbook
  4. Removal of some legacy support and refactoring some others to be less error prone

This version is NOT compatible with NNG 1.x at an API level -- there are breaking changes so please see the migration guide https://github.com/nanomsg/nng/blob/main/docs/ref/migrate/nng1.md.

Known Issues

  1. The docs are a work in progress ... its only about halfway through the mdbook conversion so far
  2. The optional ZeroTier transport is utterly broken (it likely won't even compile) - plan is to remove it, possibly rewriting it entirely later
  3. During tests, it is possible for an occasional object to get leaked (TCP test sometimes leaks a connection object) -- there are races during finalization... note that this is not a "recurring" leak, so its pretty benign.
  4. If you call nng_fini to quickly after setting things up, websocket/http may crash with use after free. The workaround right now is to wait a few dozen msec before calling nng_fini (or don't call it at all for a regular application!). This will be fixed by better use of reference counting in the near future.

What's Changed

Read more

Version 1.9.0 Feature Release

06 Oct 20:44
29aff2b
Compare
Choose a tag to compare

This is probably the last feature release for the 1.x line for NNG.

This fixes quite a few bugs, the main new features here are around TLS support.

  • TLS 1.3 is supported for Mbed TLS
  • WolfSSL is now supported without an extra module. (You need to honor the licensing terms of WolfSSL itself however.)
  • TLS support for PSK (pre-shared keys)
  • A new nng_id_visit API is available for iterating over all nodes in an ID hash map.
  • An experimental (undocumented) but exposed "public" API for UDP is available

There are significant fixes for race conditions around close, and use-after-free. Everyone is recommended to update.

More details:

What's Changed

New Contributors

Full Changelog: v1.8.0...v1.9.0

Version 1.8.0 Feature Release

21 Apr 19:41
Compare
Choose a tag to compare

New Features

This release introduces two main features.

  • A new logging framework should help with debugging.
    This framework allows applications to provide their own loggers.
    Initially we have added logging for SP connection related events, but more can be added later.
    See nng_log(3), nng_log_set_logger(3) for details.
  • In support of the above, nng_str_sockaddr(3) is added.
    This function obtains a representation of the socket address suitable for display (or logging).

Bugs Fixed

  • A memory leak associated with a connection lock object for TLS connections is fixed.
    This only affects platforms where mutexes are allocated dynamically.

Detailed Changes

New Contributors

Full Changelog: v1.7.3...v1.8.0

Version 1.7.3 Bug Fix Release

01 Mar 14:56
Compare
Choose a tag to compare

This release fixes a few bugs, including one long-standing issue.

  • Fixed deadlock closing socket on Windows (#1543)
  • Improved Mbed TLS configuration (#1771)
  • New NNG_ENABLE_IPV6 option to disable IPv6 (#1496)
  • Fix for test failures when system does not support IPv6 (also #1496)
  • Compiler warning fixes
  • Langue fixes for socket manual from @shikokuchuo
  • Fix for various documentation formatting bugs (going back to asciidoctor for formatting)

Windows users are advised to update. There is no particular urgency for updating for users of other platforms.

Version 1.7.2 bug fix release

03 Feb 23:13
Compare
Choose a tag to compare

This release has some fairly minor fixes and improvements

  • New NNG_ENABLE_COMPAT (defaults to ON) can be disabled to remove compatibility support for legacy libnanomsg
  • Better detection and handling of Mbed TLS - especially version 3.0 and later
  • Fixed some compilation warnings

None of these are particularly urgent, but if you're using Mbed TLS or prefer to have a clean build, then this might be helpful.

Version 1.7.1 Bug Fix Release

07 Jan 03:53
Compare
Choose a tag to compare

This fixes two problems and includes a new example program.

  • Fix the public id_map API -- the header was not published, so it wasn't usable. As part of this we've moved the header and also removed the ability to opt out (the changes here are too small to be worth reducing.) The header is now located in <nng/supplemental/util/idhash.h>.
  • FIx a warning when compiling nng_socket_pair, due to inconsistent prototypes (int * instead of int [2]).

The new demo program was contributed by Hugo Lindström [email protected] and demonstrates how to use nng_stream. It won't work on every system, but it should still be informative.

Version 1.7.0 Feature Release

02 Jan 01:21
Compare
Choose a tag to compare

Welcome to 2024! As a New Year's gift to you, we present version 1.7.0 of NNG.

This release contains the following notable changes:

  • A new compile time setting, NNG_MAX_POLLER_THREADS is introduced, with a default value of 8, and will limit the number of threads
    used for pollers that are concurrent (currently only Windows). Additionally, for single core systems only two threads will be started instead of four.

  • A new supplemental API, nng_id_map(3), is made available. This exposes the internal ID hash API NNG uses mapping integer IDs
    (like socket IDs) to data structures. It also brings back support for 64-bit IDs. See bug #1740.

  • Setting the NNG_OPT_RECVMAXSZ setting no longer affects pipes that are already established. The old behavior was undocumented
    and racy. Please set this setting before starting any listeners or dialers.

  • A new transport (experimental), for socket:// is available. This allows a connection using sockets created with socketpair() (or the new nng_socket_pair() supplemental API), which can help use cases where file descriptors are passed between processes or inherited via fork(). This API is only available on Linux. It does have somewhat different semantics for establishing the connection, so please see the manual page for nng_socket(5) for more information.

  • WebSocket close is fixed to conform to RFC 6455, sending the close frame, and waiting to receive the close frame from the peer. This allows websocket based connections to ensure that data messages are fully delivered before shutting down. See bugs #1733, #1734 and #1735. Thanks @alawn-wang for the inspiration and a first draft of the change.

  • The REQ and SURVEYOR protocols were fixed to improve scalability when many clients or many contexts are used. As part of this change, a new option, NNG_OPT_REQ_RESENDTICK is available to adjust how often we check for expired requests. See bug #1663.

  • A new ability to override compile-time settings for thread counts is available. This facility is considered experimental, and is not documented in manual pages -- and is subject to change without notice. Please see nng_init_set_parameter() in the nng.h header file. The values that can be tuned are listed there along with comments describing their use. See bug #1572.

  • As part of the fixes for #1572, tunable values for setting fixed values (rather upper limits) for thread counts are now exposed properly via CMake variables. These are NNG_NUM_EXPIRE_THREADS and NNG_NUM_TASKQ_THREADS.

  • A new API, nng_aio_set_expire() is introduced as a complement to nng_aio_set_timeout(). This provides absolute expiration times, which may be easier in circumstances involving multiple actions such as common state-machine based idioms.

  • A bug which caused TLS connections to spin on accept, causing high CPU usage, is fixed. See bug #1673.

  • The separate thread created for the timer is removed. See bug #1729.

  • Various minor documentation fixes were made, some contributed by Patrik Wenger [email protected].