[appendix]
== Migrating from Ranch 2.1 to Ranch 2.2

Ranch 2.2 is a maintenance release containing a small number
of fixes and improvements.

Ranch 2.2 is tested with Erlang/OTP 24.0 onward, although it
should be compatible with Erlang/OTP 22.0 and above.

=== Features added

* `DTLS` is now supported.

* The `certs_keys` option from `ssl` is now accepted
  and documented.

* The `UNIQUE_ID` PROXY protocol header extension is
  now supported.

* The `ranch_transport` behavior has a new callback
  `format_error/1` which allows finer grained formatting
  of Ranch's error messages. The callback is currently
  optional and will become required in Ranch 3.0.

=== Changed behaviors

* Ranch will now obfuscate certificates, keys and passwords
  in the error message produced on listen error.

* The exception reason when a connection process has failed
  its handshake has been changed to `{shutdown, {Reason, PeerInfo}}`
  where `PeerInfo` contains the peer name when available.

* The `{packet, raw}` socket option is no longer set explicitly,
  as this is already the default value.

=== Bugs fixed

* `ranch:stop_listener/1` will now return an error instead
  of throwing an exception when the listener does not exist.

* Fix `ranch:recv_proxy_header/2` for the upcoming Erlang/OTP 28.

* Ensure that a user crash while stopping a listener does
  not prevent a subsequent attempt to stop it.

* Alarm option `threshold` was mispelled in Ranch 2.1. This
  has been corrected. The wrong spelling `treshold` is still
  accepted and will be removed in Ranch 3.0.
