SwiftNIO 1.9.0 released!

I'm delighted to announce that the SwiftNIO project has just released SwiftNIO version 1.9.0. This release contains 34 changes from 14 contributors, including 7 first-time contributors. Huge thanks to everyone who contributed! The full release notes are available on GitHub, but are reproduced below:

Semver Minor

  • Added an API for scheduling repeated tasks on an EventLoop, via EventLoop.scheduleRepeatedTask, as well as a new RepeatedTask type.
  • Made CircularBuffer conform to BidirectionalCollection, RandomAccessCollection, and RangeReplaceableCollection, substantially increasing its utility.
  • Split error-handling for WebSocketFrameDecoder out to a new ChannelHandler, WebSocketProtocolErrorHandler. Allowed users to disable the default error handling to implement their own.
  • Added support for non-blocking file writes with NonBlockingFileIO.write.
  • Added support for iterating over all EventLoops in an EventLoopGroup.
  • Deprecated ByteBuffer.changeCapacity, replaced it with ByteBuffer.reserveCapacity. Improved performance.
  • Added two typealiases for internal data structures to the public declaration of ByteBuffer, _Index and _Capacity. These are public to work around a limitation of older Swift 4 releases, and should not be used from user code.

Semver Patch

  • Silenced some warnings.
  • Prevented 100% CPU hot-looping on macOS when using autoRead false.
  • Fixed rare crash in example WebSocket server.
  • Fixed an issue where creating a ByteBufferView over the entire storage of a ByteBuffer would cause a crash.
  • Fixed the example HTTP server to correctly respond to multiple pipelined dynamic requests on the same connection.
  • Changed the docker-compose configuration to line-buffer output to the console.
  • Fixed logical processor enumeration to use faster, cross-platform API.
  • Improvements to code internals on 32-bit platforms.
  • Correctly handle ContiguousCollection implementations that provide pointers that are larger than the number of elements they report with .count.
  • Improved HTTPServerUpgradeHandler to treat protocol upgrade names case-insensitively.
  • Fixed a bug where we could inadvertently produce no-op events to SelectableEventLoops instead of ignoring them.
  • Forward debugging information when chaining Futures using mapIfError.
  • Updated http_parser.
  • Removed unnecessary memory binding in Thread.
  • Documentation improvements.
  • Testing improvements.
  • Minor code cleanups.