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 select
function only works on sockets, and stdin
is not a socket.
If you had called WSAGetLastError
, you undoubtedly would have found that the cause was
WSAENOTSOCK
One of the descriptor sets contains an entry that is not a socket.
Try WSAEventSelect
and WaitForMultipleObjectsEx
; the latter can also wait on normal file handles as well as OVERLAPPED event objects from outstanding read operations on normal file handles.