| commit | 179a6207008d9d114e525c42c9dcb4c98b0c8735 | [log] [tgz] |
|---|---|---|
| author | Victor Boivie <boivie@webrtc.org> | Tue Apr 01 10:31:53 2025 |
| committer | WebRTC LUCI CQ <webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com> | Wed Apr 30 07:29:57 2025 |
| tree | c86f22f02a54a6516120945a8f708a1bc9546fec | |
| parent | 8c0213aae7c699f7e118bf3a8608d2465e0fd6a1 [diff] |
dcsctp: Add pull mode to consume received messages The current API delivers received message by a callback API. The caller is expected to process the received message directly, and the socket will immediately restore the advertised receiver window as there is nothing buffered in the socket any longer. But it may be buffered in the application, if it can't process messages in the same rate as they are received. How can you as a receiver tell the sender to stop sending for a while, because it can't keep up with the pace? It's not possible - the callback is triggered unconditionally. In other words: The advertised receiver window is of little use for implementing back-pressure, which it's intending to do. This CL adds a new option, that might become the default, that replaces the delivery callback with a new "signal" callback, just indicating to the caller that there are received messages that can be consumed by calling a new API on the socket. If not, the message statys buffered and it's reflected in the advertised receiver window. Note that as a back-pressure algorithm, it's quite simple. The sender must make sure that it doesn't send more than the receiver can fit within its receiver window, but it's also allowed to always have a single MTU inflight. So the sender will never stop sending completely, but will definitely go down in send rate. Depending on application, it might be a good idea to ALSO implement a more sophisticated back-pressure algorithm by e.g. sending backpressure messages on a separate stream that has a higher priority. But this CL provides the fallback basics that the SCTP protocol provides. No-Iwyu: Base CL not clean. Needs separate cleaning. Co-authored-by: Nathan Lewis <npl@google.com> Bug: webrtc:407622662 Change-Id: I9a63ee117a0fcf0ccb8409287b6a0548f9bcb7b1 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/383780 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Victor Boivie <boivie@webrtc.org> Cr-Commit-Position: refs/heads/main@{#44486}
WebRTC is a free, open software project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.
Our mission: To enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to communicate via a common set of protocols.
The WebRTC initiative is a project supported by Google, Mozilla and Opera, amongst others.
See here for instructions on how to get started developing with the native code.
Authoritative list of directories that contain the native API header files.