rfc9623v6.txt   rfc9623.txt 
skipping to change at line 12 skipping to change at line 12
Internet Engineering Task Force (IETF) A. Brunstrom, Ed. Internet Engineering Task Force (IETF) A. Brunstrom, Ed.
Request for Comments: 9623 Karlstad University Request for Comments: 9623 Karlstad University
Category: Informational T. Pauly, Ed. Category: Informational T. Pauly, Ed.
ISSN: 2070-1721 Apple Inc. ISSN: 2070-1721 Apple Inc.
R. Enghardt R. Enghardt
Netflix Netflix
P.S. Tiesel P.S. Tiesel
SAP SE SAP SE
M. Welzl M. Welzl
University of Oslo University of Oslo
December 2024 January 2025
Implementing Interfaces to Transport Services Implementing Interfaces to Transport Services
Abstract Abstract
The Transport Services System enables applications to use transport The Transport Services System enables applications to use transport
protocols flexibly for network communication and defines a protocol- protocols flexibly for network communication and defines a protocol-
independent Transport Services Application Programming Interface independent Transport Services Application Programming Interface
(API) that is based on an asynchronous, event-driven interaction (API) that is based on an asynchronous, event-driven interaction
pattern. This document serves as a guide to implementing such a pattern. This document serves as a guide to implementing such a
skipping to change at line 43 skipping to change at line 43
Internet Engineering Steering Group (IESG). Not all documents Internet Engineering Steering Group (IESG). Not all documents
approved by the IESG are candidates for any level of Internet approved by the IESG are candidates for any level of Internet
Standard; see Section 2 of RFC 7841. Standard; see Section 2 of RFC 7841.
Information about the current status of this document, any errata, Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at and how to provide feedback on it may be obtained at
https://www.rfc-editor.org/info/rfc9623. https://www.rfc-editor.org/info/rfc9623.
Copyright Notice Copyright Notice
Copyright (c) 2024 IETF Trust and the persons identified as the Copyright (c) 2025 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Revised BSD License text as described in Section 4.e of the include Revised BSD License text as described in Section 4.e of the
Trust Legal Provisions and are provided without warranty as described Trust Legal Provisions and are provided without warranty as described
skipping to change at line 313 skipping to change at line 313
identify the paths, protocols, and endpoints to use (see identify the paths, protocols, and endpoints to use (see
Section 4.2) and Section 4.2) and
* Candidate Racing (defined in Section 4.2.2 of [RFC9621]), in which * Candidate Racing (defined in Section 4.2.2 of [RFC9621]), in which
the necessary protocol handshakes are conducted so that the the necessary protocol handshakes are conducted so that the
Transport Services System can select which set to use (see Transport Services System can select which set to use (see
Section 4.3). Section 4.3).
Candidate Racing involves attempting multiple options for Connection Candidate Racing involves attempting multiple options for Connection
establishment and choosing the first option to succeed as the establishment and choosing the first option to succeed as the
Protocol Stack to use for the connection. These attempts are usually Protocol Stack to use for the Connection. These attempts are usually
staggered, with each next option starting after a delay; however, staggered, with each next option starting after a delay; however,
they can also be performed in parallel or after failures occur. they can also be performed in parallel or after failures occur.
For ease of illustration, this document structures the candidates for For ease of illustration, this document structures the candidates for
racing as a tree (see Section 4.1). This is not meant to restrict racing as a tree (see Section 4.1). This is not meant to restrict
implementations from structuring racing candidates differently. implementations from structuring racing candidates differently.
The simplest example of this process might involve identifying the The simplest example of this process might involve identifying the
single IP address to which the implementation wishes to connect, single IP address to which the implementation wishes to connect,
using the system's current default path (i.e., using the default using the system's current default path (i.e., using the default
skipping to change at line 588 skipping to change at line 588
different supported IP versions. Implementations need to be careful different supported IP versions. Implementations need to be careful
to branch in a consistent order that results in usable leaf nodes to branch in a consistent order that results in usable leaf nodes
whenever there are multiple branch types that could be used from a whenever there are multiple branch types that could be used from a
single node. single node.
This document recommends the following order of operations for This document recommends the following order of operations for
branching: branching:
1. Network paths 1. Network paths
2. Protocol Options 2. Protocol options
3. Derived Endpoints 3. Derived Endpoints
where a lower number indicates higher precedence and, therefore, where a lower number indicates higher precedence and, therefore,
higher placement in the tree. Branching between paths is the first higher placement in the tree. Branching between paths is the first
in the list because results across multiple interfaces are likely not in the list because results across multiple interfaces are likely not
related to one another: endpoint resolution may return different related to one another: endpoint resolution may return different
results, especially when using locally resolved host and service results, especially when using locally resolved host and service
names and the protocols that are supported and preferred may differ names and the protocols that are supported and preferred may differ
across interfaces. Thus, if multiple paths are attempted, the across interfaces. Thus, if multiple paths are attempted, the
overall Connection establishment process can be seen as a race overall Connection establishment process can be seen as a race
between the available paths or interfaces. between the available paths or interfaces.
Protocol Options are next checked in order. Whether or not a set of Protocol options are next checked in order. Whether or not a set of
protocols, or protocol-specific options, can successfully connect is protocols, or protocol-specific options, can successfully connect is
generally not dependent on which specific IP address is used. generally not dependent on which specific IP address is used.
Furthermore, the Protocol Stacks being attempted may influence or Furthermore, the Protocol Stacks being attempted may influence or
altogether change the Endpoint Identifiers being used. Adding a altogether change the Endpoint Identifiers being used. Adding a
proxy to a connection's branch will change the Endpoint Identifier to proxy to a connection's branch will change the Endpoint Identifier to
the proxy's IP address or hostname. Choosing an alternate protocol the proxy's IP address or hostname. Choosing an alternate protocol
may also modify the ports that should be selected. may also modify the ports that should be selected.
Branching for derived endpoints is the final step and may have Branching for derived endpoints is the final step and may have
multiple layers of derivation or resolution, such as DNS service multiple layers of derivation or resolution, such as DNS service
skipping to change at line 782 skipping to change at line 782
involve a directory service and can require communication between the involve a directory service and can require communication between the
Remote Endpoint and a rendezvous server as well as the exchange of Remote Endpoint and a rendezvous server as well as the exchange of
peer addresses. This can expose some or all of the candidate Local peer addresses. This can expose some or all of the candidate Local
Endpoints to the Remote Endpoint. Endpoints to the Remote Endpoint.
4.3. Candidate Racing 4.3. Candidate Racing
The primary goal of the Candidate Racing process is to successfully The primary goal of the Candidate Racing process is to successfully
negotiate a Protocol Stack to an Endpoint over an interface to negotiate a Protocol Stack to an Endpoint over an interface to
connect a single leaf node of the tree with as little delay and as connect a single leaf node of the tree with as little delay and as
few unnecessary connections attempts as possible. Optimizing these few unnecessary connection attempts as possible. Optimizing these
two factors improves the user experience, while minimizing network two factors improves the user experience, while minimizing network
load. load.
This section covers the dynamic aspect of Connection establishment. This section covers the dynamic aspect of Connection establishment.
The tree described above is a useful conceptual and architectural The tree described above is a useful conceptual and architectural
model. However, an implementation is unable to know all of the nodes model. However, an implementation is unable to know all of the nodes
that will be used until steps like name resolution have occurred; that will be used until steps like name resolution have occurred;
many of the possible branches ultimately might not be attempted. many of the possible branches ultimately might not be attempted.
There are three different approaches to racing the attempts for There are three different approaches to racing the attempts for
skipping to change at line 1307 skipping to change at line 1307
Implementation, but an implementation ought to allow custom Message Implementation, but an implementation ought to allow custom Message
Framers to be defined by the application or some other piece of Framers to be defined by the application or some other piece of
software. This section describes one possible API for defining software. This section describes one possible API for defining
Message Framers as an example. Message Framers as an example.
6.1. Defining Message Framers 6.1. Defining Message Framers
A Message Framer is primarily defined by the code that handles events A Message Framer is primarily defined by the code that handles events
for a Framer implementation, specifically how it handles inbound and for a Framer implementation, specifically how it handles inbound and
outbound data parsing. The function that implements custom framing outbound data parsing. The function that implements custom framing
logic will be referred to as the "Framer implementation", which may logic will be referred to as the "Framer Implementation", which may
be provided by a Transport Services implementation or the application be provided by a Transport Services Implementation or the application
itself. The Message Framer holds a reference to the object or itself. The Message Framer holds a reference to the object or
function within the main Connection implementation that delivers function within the main Connection implementation that delivers
events to the custom Framer implementation whenever data is ready to events to the custom Framer implementation whenever data is ready to
be parsed or framed. be parsed or framed.
The API examples in this section use the notation conventions for the The API examples in this section use the notation conventions for the
Transport Services API defined in Section 1.1 of [RFC9622]. Transport Services API defined in Section 1.1 of [RFC9622].
The Transport Services Implementation needs to ensure that all of the The Transport Services Implementation needs to ensure that all of the
events and actions taken on a Message Framer are synchronized to events and actions taken on a Message Framer are synchronized to
skipping to change at line 1641 skipping to change at line 1641
Examples of cached protocol state include: Examples of cached protocol state include:
* The DNS protocol can cache resolved addresses (such as those * The DNS protocol can cache resolved addresses (such as those
retrieved from A and AAAA queries) associated with a Time To Live retrieved from A and AAAA queries) associated with a Time To Live
(TTL) to be used for future hostname resolutions without requiring (TTL) to be used for future hostname resolutions without requiring
asking the DNS resolver again. asking the DNS resolver again.
* TLS caches session state and tickets based on a hostname, which * TLS caches session state and tickets based on a hostname, which
can be used for resuming sessions with a server. can be used for resuming sessions with a server.
* TCP can cache cookies for use in TFO * TCP can cache cookies for use in TFO.
Cached protocol state is primarily used during Connection Cached protocol state is primarily used during Connection
establishment for a single Protocol Stack, but it may be used to establishment for a single Protocol Stack, but it may be used to
influence an implementation's preference between several candidate influence an implementation's preference between several Candidate
Protocol Stacks. For example, if two IP address Endpoint Identifiers Protocol Stacks. For example, if two IP address Endpoint Identifiers
are otherwise equally preferred, an implementation may choose to are otherwise equally preferred, an implementation may choose to
attempt a connection to an address for which it has a TFO cookie. attempt a connection to an address for which it has a TFO cookie.
Applications can use the Transport Services API to request that a Applications can use the Transport Services API to request that a
Connection Group maintain a separate cache for protocol state. Connection Group maintain a separate cache for protocol state.
Connections in the group will not use Cached State from Connections Connections in the group will not use Cached State from Connections
outside the group, and Connections outside the group will not use outside the group, and Connections outside the group will not use
state cached from Connections inside the group. This may be state cached from Connections inside the group. This may be
necessary, for example, if application-layer identifiers rotate and necessary, for example, if application-layer identifiers rotate and
skipping to change at line 1796 skipping to change at line 1796
ConnectionError: Once established, TCP throws errors whenever the ConnectionError: Once established, TCP throws errors whenever the
connection is disconnected, such as due to receiving a RST from connection is disconnected, such as due to receiving a RST from
the peer. the peer.
Listen: LISTEN.TCP. Calling Listen for TCP binds a local port and Listen: LISTEN.TCP. Calling Listen for TCP binds a local port and
prepares it to receive inbound SYN packets from peers. prepares it to receive inbound SYN packets from peers.
ConnectionReceived: TCP Listeners will deliver new connections once ConnectionReceived: TCP Listeners will deliver new connections once
they have replied to an inbound SYN with a SYN-ACK. they have replied to an inbound SYN with a SYN-ACK.
Clone: Calling Clone on a TCP connection creates a new Connection Clone: Calling Clone on a TCP connection creates a new TCP
with equivalent parameters. These Connections, and Connections connection with equivalent parameters. The two associated
generated via later calls to Clone on an Established Connection, Connection objects, and Connections generated via later calls to
form a Connection Group. To realize entanglement for these Clone on an Established Connection, form a Connection Group. To
Connections, with the exception of connPriority, changing a realize entanglement for these Connections, with the exception of
Connection Property on one of them must affect the Connection connPriority, changing a Connection Property on one of them must
Properties of the others too. No guarantees of honoring the affect the Connection Properties of the others too. No guarantees
connPriority Connection Property are given; thus, it is safe for of honoring the connPriority Connection Property are given; thus,
an implementation of a Transport Services System to ignore this it is safe for an implementation of a Transport Services System to
Property. When it is reasonable to assume that Connections ignore this Property. When it is reasonable to assume that
traverse the same path (e.g., when they share the same Connections traverse the same path (e.g., when they share the same
encapsulation), support for it can also experimentally be encapsulation), support for it can also experimentally be
implemented using a congestion control coupling mechanism (for implemented using a congestion control coupling mechanism (for
example, see [TCP-COUPLING] or [RFC3124]). example, see [TCP-COUPLING] or [RFC3124]).
Send: SEND.TCP. On its own, TCP does not preserve Message Send: SEND.TCP. On its own, TCP does not preserve Message
boundaries. Calling Send on a TCP connection lays out the bytes boundaries. Calling Send on a TCP connection lays out the bytes
on the TCP send stream without any other delineation. Any Message on the TCP send stream without any other delineation. Any Message
marked as Final will cause TCP to send a FIN once the Message has marked as Final will cause TCP to send a FIN once the Message has
been completely written, by calling CLOSE.TCP immediately upon been completely written, by calling CLOSE.TCP immediately upon
successful termination of SEND.TCP. Note that transmitting a successful termination of SEND.TCP. Note that transmitting a
skipping to change at line 1831 skipping to change at line 1831
Receive: With RECEIVE.TCP, TCP delivers a stream of bytes without Receive: With RECEIVE.TCP, TCP delivers a stream of bytes without
any Message delineation. All data delivered in the Received or any Message delineation. All data delivered in the Received or
ReceivedPartial event will be part of a single stream-wide Message ReceivedPartial event will be part of a single stream-wide Message
that is marked Final (unless a Message Framer is used). The value that is marked Final (unless a Message Framer is used). The value
of the endOfMessage Property will be delivered when the TCP of the endOfMessage Property will be delivered when the TCP
connection has received a FIN (CLOSE-EVENT.TCP) from the peer. connection has received a FIN (CLOSE-EVENT.TCP) from the peer.
Note that reception of a FIN should not cause the Closed event to Note that reception of a FIN should not cause the Closed event to
be delivered to the application, as it will still be possible for be delivered to the application, as it will still be possible for
the application to send data. the application to send data.
Close: Calling Close on a TCP connection indicates that the Close: Calling Close on a TCP connection indicates that the TCP
Connection should be gracefully closed (CLOSE.TCP) by sending a connection should be gracefully closed (CLOSE.TCP) by sending a
FIN to the peer. It will then still be possible to receive data FIN to the peer. It will then still be possible to receive data
until the peer closes or aborts the TCP connection. The Closed until the peer closes or aborts the TCP connection. The Closed
event will be issued upon reception of a FIN. event will be issued upon reception of a FIN.
Abort: Calling Abort on a TCP connection indicates that the Abort: Calling Abort on a TCP connection indicates that the TCP
Connection should be immediately closed by sending a RST to the connection should be immediately closed by sending a RST to the
peer (ABORT.TCP). peer (ABORT.TCP).
CloseGroup: Calling CloseGroup on a TCP connection (CLOSE.TCP) is CloseGroup: Calling CloseGroup on a TCP connection (CLOSE.TCP) is
identical to calling Close on this Connection and on all identical to calling Close on its Connection object and on all
Connections in the same ConnectionGroup. Connections in the same ConnectionGroup.
AbortGroup: Calling AbortGroup on a TCP connection (ABORT.TCP) is AbortGroup: Calling AbortGroup on a TCP connection (ABORT.TCP) is
identical to calling Abort on this Connection and on all identical to calling Abort on its Connection object and on all
Connections in the same ConnectionGroup. Connections in the same ConnectionGroup.
10.2. MPTCP 10.2. MPTCP
Connectedness: Connected Connectedness: Connected
Data Unit: Byte-stream Data Unit: Byte-stream
The Transport Services API mappings for MPTCP are identical to TCP. The Transport Services API mappings for MPTCP are identical to TCP.
MPTCP adds support for multipath Properties, such as multipath and MPTCP adds support for multipath Properties, such as multipath and
skipping to change at line 1873 skipping to change at line 1873
Data Unit: Datagram Data Unit: Datagram
Connection Object: UDP connections represent a pair of specific IP Connection Object: UDP connections represent a pair of specific IP
addresses and ports on two hosts. addresses and ports on two hosts.
Initiate: CONNECT.UDP. Calling Initiate on a UDP connection causes Initiate: CONNECT.UDP. Calling Initiate on a UDP connection causes
it to reserve a local port but does not generate any traffic. it to reserve a local port but does not generate any traffic.
InitiateWithSend: Early data on a UDP connection does not have any InitiateWithSend: Early data on a UDP connection does not have any
special meaning. The data is sent whenever the Connection is special meaning. The data is sent whenever the connection is
Ready. Ready.
Ready: A UDP connection is ready once the system has reserved a Ready: A UDP connection is ready once the system has reserved a
local port and has a path to send to the Remote Endpoint. local port and has a path to send to the Remote Endpoint.
EstablishmentError: UDP connections can only generate errors on EstablishmentError: UDP connections can only generate errors on
initiation due to port conflicts on the local system. initiation due to port conflicts on the local system.
ConnectionError: UDP connections can only generate Connection errors ConnectionError: UDP connections can only generate Connection errors
in response to Abort actions. (Once in use, UDP connections can in response to Abort actions. (Once in use, UDP connections can
also generate SoftError events (ERROR.UDP) upon receiving ICMP also generate SoftError events (ERROR.UDP) upon receiving ICMP
notifications indicating failures in the network.) notifications indicating failures in the network.)
Listen: LISTEN.UDP. Calling Listen for UDP binds a local port and Listen: LISTEN.UDP. Calling Listen for UDP binds a local port and
prepares it to receive inbound UDP datagrams from peers. prepares it to receive inbound UDP datagrams from peers.
ConnectionReceived: UDP Listeners will deliver new connections once ConnectionReceived: UDP Listeners will deliver new Connections once
they have received traffic from a new Remote Endpoint. they have received traffic from a new Remote Endpoint.
Clone: Calling Clone on a UDP connection creates a new Connection Clone: Calling Clone on a UDP connection creates a new connection
with equivalent parameters. The two Connections are otherwise with equivalent parameters. The two Connection objects are
independent. otherwise independent.
Send: SEND.UDP. Calling Send on a UDP connection sends the data as Send: SEND.UDP. Calling Send on a UDP connection sends the data as
the payload of a complete UDP datagram. Marking Messages as Final the payload of a complete UDP datagram. Marking Messages as Final
does not change anything in the datagram's contents. Upon sending does not change anything in the datagram's contents. Upon sending
a UDP datagram, some relevant fields and flags in the IP header a UDP datagram, some relevant fields and flags in the IP header
can be controlled: DSCP (SET_DSCP.UDP), DF in IPv4 (SET_DF.UDP), can be controlled: DSCP (SET_DSCP.UDP), DF in IPv4 (SET_DF.UDP),
and ECN flag (SET_ECN.UDP). and ECN flag (SET_ECN.UDP).
Receive: RECEIVE.UDP. UDP only delivers complete Messages to Receive: RECEIVE.UDP. UDP only delivers complete Messages to
Received, each of which represents a single datagram received in a Received, each of which represents a single datagram received in a
UDP packet. Upon receiving a UDP datagram, the ECN flag from the UDP packet. Upon receiving a UDP datagram, the ECN flag from the
IP header can be obtained (GET_ECN.UDP). IP header can be obtained (GET_ECN.UDP).
Close: Calling Close on a UDP connection (ABORT.UDP) releases the Close: Calling Close on a UDP connection (ABORT.UDP) releases the
local port reservation. The Connection then issues a Closed local port reservation. A Closed event is then issued.
event.
Abort: Calling Abort on a UDP connection (ABORT.UDP) is identical to Abort: Calling Abort on a UDP connection (ABORT.UDP) is identical to
calling Close except that the Connection will send a calling Close except that a ConnectionError event rather than a
ConnectionError event rather than a Closed event. Closed event is issued.
CloseGroup: Calling CloseGroup on a UDP connection (ABORT.UDP) is CloseGroup: Calling CloseGroup on a UDP connection (ABORT.UDP) is
identical to calling Close on this Connection and on all identical to calling Close on its Connection object and on all
Connections in the same ConnectionGroup. Connections in the same ConnectionGroup.
AbortGroup: Calling AbortGroup on a UDP connection (ABORT.UDP) is AbortGroup: Calling AbortGroup on a UDP connection (ABORT.UDP) is
identical to calling Close on this Connection and on all identical to calling Close on its Connection object and on all
Connections in the same ConnectionGroup. Connections in the same ConnectionGroup.
10.4. UDP-Lite 10.4. UDP-Lite
Connectedness: Connectionless Connectedness: Connectionless
Data Unit: Datagram Data Unit: Datagram
The Transport Services API mappings for UDP-Lite are identical to The Transport Services API mappings for UDP-Lite are identical to
UDP. In addition, UDP-Lite supports the msgChecksumLen and UDP. In addition, UDP-Lite supports the msgChecksumLen and
skipping to change at line 1953 skipping to change at line 1952
Connectedness: Connectionless Connectedness: Connectionless
Data Unit: Datagram Data Unit: Datagram
Connection Object: Established UDP Multicast Receive connections Connection Object: Established UDP Multicast Receive connections
represent a pair of specific IP addresses and ports. The represent a pair of specific IP addresses and ports. The
direction Selection Property must be set to Unidirectional direction Selection Property must be set to Unidirectional
receive, and the Local Endpoint must be configured with a group IP receive, and the Local Endpoint must be configured with a group IP
address and a port. address and a port.
Initiate: Calling Initiate on a UDP Multicast Receive Connection Initiate: Calling Initiate on a UDP Multicast Receive connection
causes an immediate EstablishmentError. This is an unsupported causes an immediate EstablishmentError. This is an unsupported
operation. operation.
InitiateWithSend: Calling InitiateWithSend on a UDP Multicast InitiateWithSend: Calling InitiateWithSend on a UDP Multicast
Receive Connection causes an immediate EstablishmentError. This Receive connection causes an immediate EstablishmentError. This
is an unsupported operation. is an unsupported operation.
Ready: A UDP Multicast Receive Connection is ready once the system Ready: A UDP Multicast Receive connection is ready once the system
has received traffic for the appropriate group and port. has received traffic for the appropriate group and port.
EstablishmentError: UDP Multicast Receive Connections generate an EstablishmentError: UDP Multicast Receive connections cause an
EstablishmentError indicating that joining a multicast group EstablishmentError indicating that joining a multicast group
failed if Initiate is called. failed if Initiate is called.
ConnectionError: The only ConnectionError generated by a UDP ConnectionError: The only ConnectionError generated by a UDP
Multicast Receive Connection is in response to an Abort action. Multicast Receive connection is in response to an Abort action.
Listen: LISTEN.UDP. Calling Listen for UDP Multicast Receive binds Listen: LISTEN.UDP. Calling Listen for UDP Multicast Receive binds
a local port, prepares it to receive inbound UDP datagrams from a local port, prepares it to receive inbound UDP datagrams from
peers, and issues a multicast host join. If a Remote Endpoint peers, and issues a multicast host join. If a Remote Endpoint
Identifier with an address is supplied, the join is Source- Identifier with an address is supplied, the join is Source-
Specific Multicast, and the path selection is based on the route Specific Multicast, and the path selection is based on the route
to the Remote Endpoint. If a Remote Endpoint Identifier is not to the Remote Endpoint. If a Remote Endpoint Identifier is not
supplied, the join is Any-Source Multicast, and the path selection supplied, the join is Any-Source Multicast, and the path selection
is based on the outbound route to the group supplied in the Local is based on the outbound route to the group supplied in the Local
Endpoint. Endpoint.
skipping to change at line 1994 skipping to change at line 1993
application later opens a separate Connection to the same group to application later opens a separate Connection to the same group to
send signals to and/or receive signals from the common bus. In such send signals to and/or receive signals from the common bus. In such
cases, the Transport Services System needs to explicitly enable reuse cases, the Transport Services System needs to explicitly enable reuse
of the same set of addresses (equivalent to setting SO_REUSEADDR in of the same set of addresses (equivalent to setting SO_REUSEADDR in
the Socket API). the Socket API).
ConnectionReceived: UDP Multicast Receive Listeners will deliver new ConnectionReceived: UDP Multicast Receive Listeners will deliver new
Connections once they have received traffic from a new Remote Connections once they have received traffic from a new Remote
Endpoint. Endpoint.
Clone: Calling Clone on a UDP Multicast Receive Connection creates a Clone: Calling Clone on a UDP Multicast Receive connection creates a
new Connection with equivalent parameters. The two Connections new UDP Multicast Receive connection with equivalent parameters.
are otherwise independent. The two associated Connection objects are otherwise independent.
Send: SEND.UDP. Calling Send on a UDP Multicast Receive Connection Send: SEND.UDP. Calling Send on a UDP Multicast Receive connection
causes an immediate SendError. This is an unsupported operation. causes an immediate SendError. This is an unsupported operation.
Receive: RECEIVE.UDP. The Receive action in a UDP Multicast Receive Receive: RECEIVE.UDP. UDP Multicast Receive only delivers complete
Connection only delivers complete Messages to Received, each of Messages to Received, each of which represents a single datagram
which represents a single datagram received in a UDP packet. Upon received in a UDP packet. Upon receiving a UDP datagram, the ECN
receiving a UDP datagram, the ECN flag from the IP header can be flag from the IP header can be obtained (GET_ECN.UDP).
obtained (GET_ECN.UDP).
Close: Calling Close on a UDP Multicast Receive Connection Close: Calling Close on a UDP Multicast Receive connection
(ABORT.UDP) releases the local port reservation and leaves the (ABORT.UDP) releases the local port reservation and leaves the
group. The Connection then issues a Closed event. group. A Closed event is then issued.
Abort: Calling Abort on a UDP Multicast Receive Connection Abort: Calling Abort on a UDP Multicast Receive connection
(ABORT.UDP) is identical to calling Close except that the (ABORT.UDP) is identical to calling Close except that a
Connection will send a ConnectionError event rather than a Closed ConnectionError event rather than a Closed event is issued.
event.
CloseGroup: Calling CloseGroup on a UDP Multicast Receive Connection CloseGroup: Calling CloseGroup on a UDP Multicast Receive connection
(ABORT.UDP) is identical to calling Close on this Connection and (ABORT.UDP) is identical to calling Close on its Connection object
on all Connections in the same ConnectionGroup. and on all Connections in the same ConnectionGroup.
AbortGroup: Calling AbortGroup on a UDP Multicast Receive Connection AbortGroup: Calling AbortGroup on a UDP Multicast Receive connection
(ABORT.UDP) is identical to calling Close on this Connection and (ABORT.UDP) is identical to calling Close on its Connection object
on all Connections in the same ConnectionGroup. and on all Connections in the same ConnectionGroup.
10.6. SCTP 10.6. SCTP
Connectedness: Connected Connectedness: Connected
Data Unit: Message Data Unit: Message
Connection Object: Connection objects can be mapped to an SCTP Connection Object: Connection objects can be mapped to an SCTP
association or a stream in an SCTP association. Mapping association or a stream in an SCTP association. Mapping
Connection objects to SCTP streams is called "stream mapping" and Connection objects to SCTP streams is called "stream mapping" and
skipping to change at line 2131 skipping to change at line 2128
Receive: RECEIVE.SCTP. The "partial flag" of RECEIVE.SCTP invokes a Receive: RECEIVE.SCTP. The "partial flag" of RECEIVE.SCTP invokes a
ReceivedPartial event. ReceivedPartial event.
Close: If this is the only Connection object that is assigned to the Close: If this is the only Connection object that is assigned to the
SCTP association, CLOSE.SCTP is called and the Closed event will SCTP association, CLOSE.SCTP is called and the Closed event will
be delivered to the application upon the ensuing CLOSE-EVENT.SCTP. be delivered to the application upon the ensuing CLOSE-EVENT.SCTP.
Else, the Connection object is one out of several Connection Else, the Connection object is one out of several Connection
objects that are assigned to the same SCTP association, and objects that are assigned to the same SCTP association, and
RESET_STREAM.SCTP must be called, which informs the peer that the RESET_STREAM.SCTP must be called, which informs the peer that the
stream will no longer be used for mapping and can be used by stream will no longer be used for mapping and can be used by a
future Initiate, InitiateWithSend, or Listen action. At the peer, future Initiate, InitiateWithSend, or Listen action. At the peer,
the event RESET_STREAM-EVENT.SCTP will be initiated, which the the event RESET_STREAM-EVENT.SCTP will be initiated, which the
peer must answer by issuing RESET_STREAM.SCTP too. The resulting peer must answer by issuing RESET_STREAM.SCTP too. The resulting
local RESET_STREAM-EVENT.SCTP informs the Transport Services local RESET_STREAM-EVENT.SCTP informs the Transport Services
System that the stream id can now be reused by the next Initiate, System that the stream id can now be reused by the next Initiate,
InitiateWithSend, or Listen actions, and invokes a Closed event InitiateWithSend, or Listen action, and invokes a Closed event
toward the application. toward the application.
Abort: If this is the only Connection object that is assigned to the Abort: If this is the only Connection object that is assigned to the
SCTP association, ABORT.SCTP is called. Else, the Connection SCTP association, ABORT.SCTP is called. Else, the Connection
object is one out of several Connection objects that are assigned object is one out of several Connection objects that are assigned
to the same SCTP association, and shutdown proceeds as described to the same SCTP association, and shutdown proceeds as described
under Close. under Close.
CloseGroup: Calling CloseGroup calls CLOSE.SCTP, which closes all CloseGroup: Calling CloseGroup calls CLOSE.SCTP, which closes all
Connections in the SCTP association. Connections in the SCTP association.
skipping to change at line 2248 skipping to change at line 2245
Services for End Systems", RFC 8923, DOI 10.17487/RFC8923, Services for End Systems", RFC 8923, DOI 10.17487/RFC8923,
October 2020, <https://www.rfc-editor.org/info/rfc8923>. October 2020, <https://www.rfc-editor.org/info/rfc8923>.
[RFC9113] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, [RFC9113] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113,
DOI 10.17487/RFC9113, June 2022, DOI 10.17487/RFC9113, June 2022,
<https://www.rfc-editor.org/info/rfc9113>. <https://www.rfc-editor.org/info/rfc9113>.
[RFC9621] Pauly, T., Ed., Trammell, B., Ed., Brunstrom, A., [RFC9621] Pauly, T., Ed., Trammell, B., Ed., Brunstrom, A.,
Fairhurst, G., and C. S. Perkins, "Architecture and Fairhurst, G., and C. S. Perkins, "Architecture and
Requirements for Transport Services", RFC 9621, Requirements for Transport Services", RFC 9621,
DOI 10.17487/RFC9621, December 2024, DOI 10.17487/RFC9621, January 2025,
<https://www.rfc-editor.org/info/rfc9621>. <https://www.rfc-editor.org/info/rfc9621>.
[RFC9622] Trammell, B., Ed., Welzl, M., Ed., Enghardt, R., [RFC9622] Trammell, B., Ed., Welzl, M., Ed., Enghardt, R.,
Fairhurst, G., Kühlewind, M., Perkins, C. S., Tiesel, P. Fairhurst, G., Kühlewind, M., Perkins, C. S., Tiesel, P.
S., and T. Pauly, "An Abstract Application Programming S., and T. Pauly, "An Abstract Application Programming
Interface (API) for Transport Services", RFC 9622, Interface (API) for Transport Services", RFC 9622,
DOI 10.17487/RFC9622, December 2024, DOI 10.17487/RFC9622, January 2025,
<https://www.rfc-editor.org/info/rfc9622>. <https://www.rfc-editor.org/info/rfc9622>.
13.2. Informative References 13.2. Informative References
[NEAT-flow-mapping] [NEAT-flow-mapping]
Weinrank, F. and M. Tuxen, "Transparent flow mapping for Weinrank, F. and M. Tuxen, "Transparent flow mapping for
NEAT", 2017 IFIP Networking Conference (IFIP Networking) NEAT", 2017 IFIP Networking Conference (IFIP Networking)
and Workshops, DOI 10.23919/IFIPNetworking.2017.8264876, and Workshops, DOI 10.23919/IFIPNetworking.2017.8264876,
June 2017, <https://ieeexplore.ieee.org/document/8264876>. June 2017, <https://ieeexplore.ieee.org/document/8264876>.
 End of changes. 38 change blocks. 
68 lines changed or deleted 65 lines changed or added

This html diff was produced by rfcdiff 1.48.