Go client program generates a lot a sockets in TIME_WAIT state

The default http.Transport is opening and closing connections too quickly. Since all connections are to the same host:port combination, you need to increase MaxIdleConnsPerHost to match your value for num_coroutines. Otherwise, the transport will frequently close the extra connections, only to have them reopened immediately. You can set this globally on the default transport: http.DefaultTransport.(*http.Transport).MaxIdleConnsPerHost … Read more

What is the cost of many TIME_WAIT on the server side?

Each socket in TIME_WAIT consumes some memory in the kernel, usually somewhat less than an ESTABLISHED socket yet still significant. A sufficiently large number could exhaust kernel memory, or at least degrade performance because that memory could be used for other purposes. TIME_WAIT sockets do not hold open file descriptors (assuming they have been closed … Read more