Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do web servers avoid TIME_WAIT?

I'm writing a simple HTTP server and learning about TIME_WAIT. How do real web servers in heavy environments handle requests from thousands of users without all the sockets getting stuck in TIME_WAIT after a request is handled? (Not asking about keep-alive -- that would help for a single client, but not for thousands of different clients coming through).

I've read that you try and get the client to close first, so that all the TIME_WAITs get spread out among all the clients, instead of concentrated on the server.

How is this done? At some point the server has to call close/closesocket.

like image 365
DougN Avatar asked Sep 17 '10 20:09

DougN


1 Answers

The peer that initiates the active close is the one that goes into TIME_WAIT. So as long as the client closes the connection the client gets the TIME_WAIT and not the server. I go into this all in a little more detail in this blog posting. If you are unable to reach that link then the wayback machine has it.

like image 98
Len Holgate Avatar answered Sep 22 '22 12:09

Len Holgate