Subject: [BEHAVE] [Technical Errata Reported] RFC6062 (3467)

From: RFC Errata System <[email-masked]>
Date: Tue, 22 Jan 2013 19:16:05 -0800 (PST)

The following errata report has been submitted for RFC6062,
"Traversal Using Relays around NAT (TURN) Extensions for TCP Allocations".

--------------------------------------
You may review the report below and at:
http://www.rfc-editor.org/errata_search.php?rfc=6062&eid=3467

--------------------------------------
Type: Technical
Reported by: Nazmus Shakeeb <[email-masked]>

Section: 5.2.

Original Text
-------------
the server MUST initiate an outgoing TCP connection.  The local endpoint is the relayed transport address associated with the allocation.

Corrected Text
--------------
the server MUST initiate an outgoing TCP connection.  This connection MUST NOT be made using the relayed transport address associated with the allocation.

Notes
-----
if you send connect request using the allocated port then port the will not be in listen mode and this will prevent incoming tcp connection on this port.

this will cause major problem while doing ice check. The effect is so bad that 

it may cause 97% call failure while using turn tcp behind nat.

Instructions:
-------------
This errata is currently posted as "Reported". If necessary, please
use "Reply All" to discuss whether it should be verified or
rejected. When a decision is reached, the verifying party (IESG)
can log in to change the status and edit the report, if necessary. 

--------------------------------------
RFC6062 (draft-ietf-behave-turn-tcp-07)
--------------------------------------
Title               : Traversal Using Relays around NAT (TURN) Extensions for TCP Allocations
Publication Date    : November 2010
Author(s)           : S. Perreault, Ed., J. Rosenberg
Category            : PROPOSED STANDARD
Source              : Behavior Engineering for Hindrance Avoidance
Area                : Transport
Stream              : IETF
Verifying Party     : IESG

---

From: Simon Perreault <[email-masked]>
Date: Wed, 23 Jan 2013 12:24:42 +0100

Interesting...

It is instructive to go back to a very old thread:
http://www.ietf.org/mail-archive/web/behave/current/msg05542.html

Here's the relevant part:

> It it possible to create multiple sockets with SO_REUSEADDR that are
> all bound to the same IP address and port.  The TURN TCP protocol
> can hide this and simply allow multiple incoming or outgoing
> connections, simultaneously or sequentially.

So, is it actually possible to do that or not?

On Linux at least it looks like it is not possible. From socket(7):

        SO_REUSEADDR
               Indicates that the rules  used  in  validating  addresses
               supplied  in  a  bind(2) call should allow reuse of local
               addresses.  For AF_INET sockets this means that a  socket
               may bind, *except when there is an active listening socket
               bound to the address*.  When the listening socket is bound
               to  INADDR_ANY with a specific port then it is not possi‐
               ble to bind to this port for any local address.  Argument
               is an integer boolean flag

Simon