Bind Before Connect

If you create a socket and call connect(dst, port) on it, or first call bind(src, port) with port 0, the kernel will allocate from the pool of up to 64k available ports. However, with with SO_REUSEPORT, you can also share ports to create an effectively unlimited number of connections - as long as the destination address is different for each connection sharing the same port. To have multiple connections to the same IP/Port pair, you can use different source IP addresses instead.

SO_REUSEADDR behaves slightly differently than SO_REUSEPORT, allowing reuse of addresses in the cooldown period after a process releases a socket, plus allowing binding of wildcard addresses (0.0.0.0) and normal addresses to the same port.

There are various implementation concerns (ie, bind is fine, but after connect one of the reuse rules is broken) that the linked post discusses.