The select function is used to determine the status of one or more sockets in a set. For each socket, the caller can request information on read, write, or error status. A set of sockets is indicated by an FD_SET structure.
Windows Sockets 2 allows an application to use more than one service provider, but the select function is limited to a set of sockets associated with a single service provider. This does not in any way restrict an application from having multiple sockets open through multiple providers.
There are two ways to determine the status of set of sockets that span more than one service provider: 1) using the WSAWaitForMultipleEvents or WSAEventSelect functions when blocking semantics are employed, and 2) using the WSAAsyncSelect function when nonblocking operations are employed.
When an application needs to use blocking semantics on a set of sockets that spans multiple providers, WSAWaitForMultipleEvents is recommended. The application can also use the WSAEventSelect function, which allows the FD_XXX network events (see WSAEventSelect) to associate with an event object and be handled from within the event object paradigm (described in Overlapped I/O and Event Objects).
The WSAAsyncSelect function is recommended when nonblocking operations are preferred. This function is not restricted to a single provider because it takes a socket descriptor as an input parameter.