Multiple Provider Restrictions on Select
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 a set of sockets that spans more than one service provider:
- Using the WSAWaitForMultipleEvents or WSAEventSelect functions when blocking semantics are employed.
- Using the WSAAsyncSelect function when nonblocking operations are employed and the application is already using a Windows message pump.
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 not restricted to a single provider because it takes a single socket descriptor as an input parameter. Note however, that WSAEventSelect function offers better performance and scalability over WSAAsyncSelect as the overhead of maintaining the message pump with Winsock event messages increases as the total number of sockets being used increases.