Does Mac OS X throttle the RATE of socket creation?
Solution 1:
Mac OS X starts opening ephemeral ports at 49152. Port numbers are 16-bit unsigned integers, so there are 65535 possible ports. 65535 - 49152 = 16383. I think you've got 16K ports in TIME_WAIT.
Update: You might want to look at the following sysctl(8) variables:
net.inet.ip.portrange.lowfirst: 1023
net.inet.ip.portrange.lowlast: 600
net.inet.ip.portrange.first: 49152
net.inet.ip.portrange.last: 65535
net.inet.ip.portrange.hifirst: 49152
net.inet.ip.portrange.hilast: 65535
I think if you set hifirst to something lower, you'll increase the number of ephemeral ports available on your system.
There might be a socket option or something to tell the stack to basically violate the TCP spec and use a nonstandard value for TIME_WAIT, but I'm not enough of a Mac OS X sockets programmer to know that.
Update 2: You probably want to use setsockopt(2) to set SO_REUSEADDR.