Skip to content

1.20.0

Choose a tag to compare

@freitasjca freitasjca released this 19 Sep 19:03
· 18 commits to main since this release

What's new in 1.20.0

IPv6 listener + poll() in SocketWaitImpl

CreateListenerSocket6 / AcceptConnection6 start a second accept thread bound to :: with IPV6_V6ONLY=1, so the existing IPv4 listener is not disturbed. On IPv4-only hosts the call returns INVALID_SOCKET_HANDLE and an error string rather than raising.

SocketWaitImpl replaces select with fpPoll / poll on FPC/UNIX and Delphi POSIX, removing the silent no-timeout fallback for file descriptors ≥ 1024.

Bounded RSS on large streaming downloads — CL3b

PushStreamData was calling Seek(0, soBeginning) after every append, destroying the read cursor that ReadResponseBodyCallback uses. The buffer grew without bound and the worker deadlocked permanently under slow-client conditions.

Fixed by saving FStreamBuf.Position before seeking to end and restoring it after the write. Gate: tests/Nghttp2FloodRead.dpr downloads 64 MB in 1 024 × 64 KB ReadChunk calls with < 8 MB peak client RSS.

Connection reuse — Reconnect, Ping, GOAWAY (CL4)

  • Reconnect opens a fresh session to the same host/port without reallocating the client object
  • Ping(ATimeoutMS) submits an HTTP/2 PING frame and pumps until ACK or timeout
  • GoAwayReceived property — set when the server sends GOAWAY
  • A stream closed with REFUSED_STREAM (error 7) now gets a targeted error message pointing to Reconnect

Group-B scalar wire forms — WIRE-FORM-1

TProtoMemberWireForm (pwfDefault, pwfZigZag, pwfFixed) selects the wire encoding for sint32/sint64 and the fixed/sfixed family via a second TProtoMemberAttribute constructor overload. protogen emits [TProtoMember(N, pwfZigZag)] for sint* and [TProtoMember(N, pwfFixed)] for fixed*/sfixed* automatically. The 7 googleapis schemas previously refused for Group-B scalars now compile.

Upgrade notes

The doc/ files update all corpus figures and refusal lists. Run compile-check.sh --all after upgrading to get the post-WIRE-FORM-1 acceptance count.