select
select is used by an application to receive notifications of events that occur on one or more sockets of interest.
Syntax
int select( int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout );
Parameters
nfds
Ignored. The nfds parameter is included only for compatibility with Berkeley sockets.
readfds
The address of the descriptor set that contains a set of sockets for which the application wishes to be notified when any of them becomes readable.
writefds
The address of the descriptor set that contains a set of sockets for which the application wishes to be notified when any of them becomes writeable.
exceptfds
The address of the descriptor set that contains a set of sockets for which the application wishes to be notified when any of them has a pending exception condition. Unlike in Windows, the only exception condition that can create a notification is when out-of-band data is available on a socket.
timeout
The address of a struct timeval which specifies how long the application is willing to block on the select call while waiting for a notification.
Return Value
0 if a timeout occurs and none of the selected events has occurred on any of the selected sockets, or
A positive integer which is the sum of the number of sockets in each fd_set for which events have occurred, or
SOCKET_ERROR if the function fails
Use WSAGetLastError to retrieve a specific error code.
Remarks
The following macros are provided for manipulating socket descriptor sets:
Macro | Description |
---|---|
FD_ZERO(&fdset); | Clears a socket descriptor set. |
FD_SET(fd, &fdset); | Adds a socket descriptor fd to fdset . |
FD_CLR(fd, &fdset); | Removes a socket descriptor fd from fdset . |
FD_ISSET(fd, &fdset); | Is non-zero if fd is a member of fdset , zero otherwise. |
FD_SETSIZE is a maximum number of socket descriptors which could be used in a descriptor set. The default is 64.
The RTX64 RT-TCP/IP Stack requires FD_SETSIZE to be greater than or equal to the number of sockets configured by the Stack. Setting it to a smaller value may result in a system crash.
Resolution of timeout depends on the HAL timer period. Note that timeout can sometimes occur within one HAL timer tick earlier than the requested time.
Requirements
Minimum Supported Version | RTX64 2013 |
Header | Winsock2.h |
Library | RtTcpip.lib |
See also: