On 4/3/2016 5:20 PM, Toerless Eckert wrote:
> Eg: Consider someone used the transport service definitions of this drat
> randomnly,
> there is no way to figure out which would or would not succeed, because
> there is
> no definition how send/received packets are associated to transport
> service endpoints.
>
> Example: LISTEN.UDP:
> Pass 1 primitive: 'receive'.
> Parameters: 1 local IP address (optional); 1 destination transport
> address.
It should be:
local IP address or ANY
it's not really "optional"; it's more like
ANY is the default until overridden
local port (selected explicitly or "let the OS pick")
remote IP address or ANY (same thing as above)
remote port or ANY
NOTE: any of these can be indicated for most existing implementations of
UDP. The local side is set using the BIND call and the remote side set
using the CONNECT call - which is a bit confusing because UDP is
connectionless.
That's why the CONNECT used here is confusing - it's used more like BIND
than CONNECT and ignores the existing CONNECT semantics.
----
Note that this should allow some cases that aren't really well
understood or implemented, e.g.:
two different OS endpoints listen as follows:
A on loc-IP ANY loc-port 80
B on loc-IP 10.0.0.1 loc-port 80
I.e., there's ambiguity as to whether ANY means EVERY or "any except
those more specifically bound".
----
Additionally, there's no such thing as CLOSE for UDP. CLOSE happens on
the OS endpoint, not the connection.
AFAIR, this is the difference between unix close() and shutdown(). The
former disconnects both the connection and the OS endpoint, whereas the
latter "undoes" the corresponding connect() but not the socket creation,
allowing half-open connections (I wonder - is shutdown() implemented for
UDP? does it clear out the remote IP/port expectations?)
Joe
_______________________________________________
Taps mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/taps