Использование Select () и возврат ошибок «без ошибок» - PullRequest
0 голосов
/ 27 февраля 2012

У меня возникли некоторые проблемы с использованием Select (), чтобы определить, когда есть данные, доступные для чтения в сокете.Я ожидаю, что сокет, к которому я подключаюсь, не имеет данных и, следовательно, для select возвращает значение времени ожидания или 0.Вместо этого я получаю значение -1, и появляется сообщение «ошибка: нет ошибки».

У меня есть код, очень похожий на этот пример: https://beej.us/guide/bgnet/html/multi/selectman.html

Я прочитал команду select () документацию пару раз здесь: msdn.microsoft.com/en-us/library/windows/desktop/ms740141(v=vs.85).aspx

Любые идеи приветствуются.Спасибо!

Особенности: C ++, Win-XP, Microsoft Visual C ++ 2010

1 Ответ

3 голосов
/ 28 февраля 2012

Вы добавляете свой сокет в структуру fd_set до вы фактически создаете сокет:

FD_SET(s, &readfds);
// (...)
int iConnected = ConnectToHost(PortNum, IpAddy);
//^ This actually calls: s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);

Поэтому вы добавляете недопустимый сокет в fd_set.Создайте сокет, прежде чем делать это:

int iConnected = ConnectToHost(PortNum, IpAddy);
//(...)
FD_SET(s, &readfds);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...