The first API used watching a set of non blocking sockets in the Berkeley sockets API was the select call. It has the problem performance degrades as you increase the number of sockets in the array it watchs significantly.
This was called the socket https://en.wikipedia.org/wiki/C10k_problem. I discuss this with Vismay, with 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: