I do not readily see the advantage of using forks especially on the client side and especially since the server is handling requests one at a time. The client is always going to be stuck in a rather long I/O wait for the server to respond, and you simply need to throttle how many requests the client sends out at one time. (Each time a reply arrives, it can simply check a counter and submit a new request.)