...
This was called the socket https://en.wikipedia.org/wiki/C10k_problem. I discuss this with Vismay, with a brief guest appearance by Prannay:
...
It turned out that it is possible to solve this problem using the following different APIs on each of the major operating systems:
It’s relatively simple to write an abstraction library which will work with epoll and kqueue since both APIs work in a similar fashion - they will tell the application when a socket can be read from or be written to or it has closed.
But IOCP works with a completely different paradigm - you basically have to give the operating system a bucket of memory to read from or write to or fill with data from a connecting socket. The first time I learned this was frustrating since I had to completely throw away my first implementation - the needs of IOCP changed how my interfaces worked.
This is why nginx to this day isn’t optimized to run on Windows.
...