This is a feature request to allow creating a Transport without giving a bind address nor external address. The intended use case is Transports behind NAT, which do not have a public address.
In this mode, createTransport would not forkServer (impossible, since there's no bind address), and all EndPoints created on this Transport would have randomly-generated addresses (maybe a standard UUIDv4). The idea is that these addresses are meaningless to every EndPoint except for itself: a loopback connection is still made by testing for equality, but nobody else can successfully connect to it by using this address.
When one of these EndPoints connects (heavyweight, new socket) to a peer, it doesn't give its address. Instead, the peer generates a random address for it, which is valid for the lifetime of the socket, and meaningless to every other EndPoint. It will be attached to the ConnectionOpened event, and so it's possible for the application to make a lightweight connection back to the un-addressable EndPoint, but only by using this ephemeral address; the actual address of the EndPoint will be different and will result in ConnectNotFound.
This is a feature request to allow creating a
Transport
without giving a bind address nor external address. The intended use case isTransport
s behind NAT, which do not have a public address.In this mode,
createTransport
would notforkServer
(impossible, since there's no bind address), and allEndPoint
s created on thisTransport
would have randomly-generated addresses (maybe a standard UUIDv4). The idea is that these addresses are meaningless to everyEndPoint
except for itself: a loopback connection is still made by testing for equality, but nobody else can successfully connect to it by using this address.When one of these
EndPoint
s connects (heavyweight, new socket) to a peer, it doesn't give its address. Instead, the peer generates a random address for it, which is valid for the lifetime of the socket, and meaningless to every otherEndPoint
. It will be attached to theConnectionOpened
event, and so it's possible for the application to make a lightweight connection back to the un-addressableEndPoint
, but only by using this ephemeral address; the actual address of theEndPoint
will be different and will result inConnectNotFound
.