2012-02-27 4 views
0

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

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

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

Любые идеи были бы оценены. Благодаря!

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

Мой 'минимальный' код здесь:http://pastebin.com/q9pZ33UK

+2

Не видя своего кода, мы не знаем, что именно вы делаете неправильно. –

+0

Спасибо. Должен ли я помещать весь контент кода в этот пост или на другой сайт для размещения текста? Это очень долго, и большая часть кода совершенно не имеет отношения к этой проблеме. – ProGirlXOXO

+0

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

ответ

3

Вы добавляете свой сокет к структуре 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); 
+0

приятный улов. прекрасная глобальная переменная :) –

+0

Большое вам спасибо! – ProGirlXOXO

Смежные вопросы