Using Winsock2 the code sequence below returns -1 (failure) for select().
#include <Winsock2.h>
#include <stdio.h>
...
int rc;
int fdstdin = fileno(stdin); /* returns 0 as expected */
fd_set fds;
FD_ZERO(&fds);
FD_SET(fdstdin, &fds);
rc = select(1, &fds, NULL, NULL, NULL);
...
Is this the expected behaviour when using Winsock2 or am I missing something?
This is expected behavior. As mentioned all over the documentation, winsock’s
selectfunction only works on sockets, andstdinis not a socket.If you had called
WSAGetLastError, you undoubtedly would have found that the cause wasTry
WSAEventSelectandWaitForMultipleObjectsEx; the latter can also wait on normal file handles as well as OVERLAPPED event objects from outstanding read operations on normal file handles.