| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > RecvFrom возвращает WSAEWOULDBLOCK |
| Автор: Lexicss 26.9.2008, 14:11 | ||||||
| Работаю с протоколом UDP/IP Программа обрабатывает присланные ей датаграммы. Вот часть кода :
Когда программа запускается, а в во входном буффере данных нет - всё ок. Когда приходят датаграммы, взводится событие arrThrEvent[1], RecvFrom возвращает число байт в датаграмме - всё ок, однако когда датаграммы заканчиваются - то событие всё равно взводится. Срабатывает функция - RecvFrom с ошибкой WSAGetLastError = WSAEWOULDBLOCK. И всё цикл пошёл бесконечный, как будто я событие не сбрасываю. Прочитал в msdn, что типа это значит сокет в неблокирующем риежими и всё ок. Ну перевожу я его в блокирующий режим. Как я понял это делается так:
Всё тоже самое. Проблема зацикливания остаётся, и грузит проц под 100%. Ничего не помогает. Пришлось сделать так чтобы хоть нагрузку снять:
Но всё же хотел обратиться за помощью, можно ли как-то здесь придумть красиво чтобы по прибытию датаграмм событие не взаодилось до прибытия следующиХ? Событие привязал так : WSAEventSelect(sock,arrThrEvent[1],FD_READ) |
| Автор: Lexicss 26.9.2008, 15:09 |
| CountEvent = 2; |
| Автор: Lexicss 26.9.2008, 16:08 |
| Нашёл в чём ошибка. В WSAResetEvent указал элемент не того массива, но похожий на названием на тот что в MsgWait... Блин, а немало времени убил на поиски... |