How to avoid a NoRouteToHostException?
Have you tried setting:
echo "1" >/proc/sys/net/ipv4/tcp_tw_reuse
and/or
echo "1" >/proc/sys/net/ipv4/tcp_tw_recycle
These settings may make Linux re-use the TIME_WAIT sockets. Unfortunately I can't find any definitive documentation.
This may help:
Another important ramification of the ephemeral port range is that it limits the maximum number of connections from one machine to a specific service on a remote machine! The TCP/IP protocol uses the connection's 4-tuple to distinguish between connections, so if the ephemeral port range is only 4000 ports wide, that means that there can only be 4000 unique connections from a client machine to a remote service at one time.
So maybe you run out of available ports. To get the number of available ports, see
$ cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000
The output is from my Ubuntu system, where I'd have 28,232 ports for client connections. Hence, your test would fail as soon as you have 280+ clients.
Cannot assign requested address is the error string for the EADDRNOTAVAIL error.
I suspect you are running out of source ports. There are 16,383 sockets in the dynamic range available for use as a source port (see RFC 2780). 150 clients * 100 connections = 15,000 ports - so you are probably hitting this limit.