FD_SOCK is quite old and hasn't been given a lot of maintenance love over the last two decades (2001!).
The code is quite complicated/brittle (for example FD_SOCK.run()) and could use some simplification.
The major enhancement is to use a fixed port, so we can scrap the code which maintains the cache of IP addresses:ports and UUIDs. This requires a poor man's state transfer of this cache to new members, plus update messages whenever a new member starts (WHO_HAS_SOCK, I_HAVE_SOCK, GET_CACHE, GET_CACHE_RSP).
Using a fixed port allows us to reuse the UUID/IP-address cache, which already exists in the transport. When a view change is received, a member simply determines the peer to which to connect to by grabbing the peer's IP address from the transport cache, adding an offset, and connecting to it. We probably need a port range, too.