Как правильно обойти тугодумную функцию recv? - Assembler

Узнай цену своей работы

Формулировка задачи:

Доброго дня. Колупаясь в подарке от Charles Kludge Есть ли на хитрого пользователя таймер с винтом? столкнулся с такой проблемой. Периодически, не всегда но достаточно часто, при запросе серверного времени засыпает функция получения пакета invoke recv, [s], buf, sizeof_buf, 0 . Именно засыпает, потому как до следующей за ней проверки, которую я сам дописал
cmp EAX,48 ; проверить число полученых байт
jne Exit ; если несрастуха завершить
программа так и не добирается, застревая по видимому где то в недрах функции. Искусственно создать такую ситуацию можно послав несколько повторяющихся запросов в течении короткого промежутка времени. Должно быть на сервере стоит какая то защита что бы один и тот же компьютер не заспрашивал его до усрачки. И он попросту перестаёт отвечать. Но дело в том что это иногда происходит и на первом запросе. После которого консоль висит, время идёт, я чешу репу и недоумеваю. Ведь по логике вещей функция не получив пакета должна показав мне в EAX шиш с маслом завершиться. Хотелось бы услышать мнения искушённых в подобного рода залипухах людей, как с этим бороться? Какими методами можно возвращать прогу из каматоза для продолжения ну или для повторения запроса?

Решение задачи: «Как правильно обойти тугодумную функцию recv?»

textual
Листинг программы
if ((r = recv(pd, buf, sizeof(buf), MSG_DONTWAIT)) == -1)
			{ if (errno != EAGAIN) break ; }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы