Winsock2 select () на fd 0 (stdin) завершается ошибкой - PullRequest
0 голосов
/ 08 января 2012

Используя Winsock2 приведенная ниже кодовая последовательность возвращает -1 (сбой) для 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);

...

Это ожидаемое поведение при использовании Winsock2 или я что-то упустил?

1 Ответ

3 голосов
/ 08 января 2012

Это ожидаемое поведение.Как уже упоминалось в документации , функция select winsock работает только на сокетах, а stdin не является сокетом.

Если бы вы вызвали WSAGetLastError, вы, несомненно,обнаружил, что причина была

WSAENOTSOCK Один из наборов дескрипторов содержит запись, которая не является сокетом.

Попробуйте WSAEventSelectи WaitForMultipleObjectsEx;последний также может ожидать обычные файловые дескрипторы и объекты событий OVERLAPPED от ожидающих операций чтения обычных файловых дескрипторов.

...