| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > WSAENOTSOCK в select |
| Автор: Bargest 6.2.2015, 23:48 | ||||
Пытаюсь подключить клиента и сразу же проверить наличие данных для приема:
И select выдает SOCKET_ERROR, код ошибки - WSAENOTSOCK ("не сокет"). MSDN говорит, что select возвращает эту ошибку, если в структуре fd_set одно из полей не является сокетом. При этом если я не использую select, а просто принимаю данные:
То данные благополучно приходят. Пробовал делать ожидание после accept'а, пробовал делать в блокирующем режиме (с NULL вместо таймаута) - результат один и тот же. Изначально эта проверка select'ом делалась в другом месте, но сейчас в поисках баги я уже перенес эту проверку вплотную к accept'у. И все равно получаю этот WSAENOTSOCK. Что тут не так? |
| Автор: feodorv 7.2.2015, 04:41 |
На вид все так, только Вы не проверили, что sock не равен INVALID_SOCKET. Но раз работает, то сокет, вроде рабочий. А какой тип у переменной sock? |
| Автор: feodorv 7.2.2015, 04:56 |
Может, вместо IPPROTO_IP тупо 0 поставить? |
| Автор: Bargest 7.2.2015, 13:11 | ||||||||||
В дебаге проверял, там 0x68. Вполне нормальный сокет.
В общем, так и не поняв, в чем была проблема, переделал на WSAEventSelect + WaitForSingleObject и стало нормально. Вопрос более не актуален. |