Функция Winsock Select () выдает исключение 0xC00000FD - PullRequest
0 голосов
/ 04 июня 2010

У меня есть сервер на основе выбора.Сокеты находятся в режиме блокировки, но для функции select () я использую 250 мс.timeout.

В основном мой сервер принимает только одного клиента и отправляет данные этому клиенту.Если я просто отправляю данные с сервера клиенту, он работает неделями без проблем.

Но я понял, что если клиент отправляет данные на сервер через 3-4 часа в строке select (), это дает исключение переполнения стека (0xC00000FD).Я красную десятки раз MSDN страницы Select (), но ничего не упомянуто, связанных с этим.Я действительно застрял.Любая помощь будет оценена.

Кстати, я нашел в сети пример;

http://tangentsoft.net/wskfaq/examples/basics/select-server.cpp

здесь, после принятия клиентского соединения, он устанавливает его в неблокирующий режим.И отмечается, что

 // Mark the socket as non-blocking, for safety.

Что означает «безопасность» выше?Так ты думаешь это моя проблема?Потому что в моей реализации подключенные находятся в режиме блокировки?

Заранее спасибо

1 Ответ

1 голос
/ 05 июня 2010

Исключение означает, что в вашем коде есть ошибка. Так как вы получаете переполнение стека, у вас, вероятно, есть рекурсивный цикл в вашем коде, который выполняется слишком долго, поглощая пространство стека при каждом вызове, пока не останется больше места стека. При нормальных условиях select () возвращает код ошибки в случае сбоя, поэтому вам нужно где-то испортить память вашей программы, чтобы получить исключение.

...