Как правильно обойти тугодумную функцию recv? - Assembler
Формулировка задачи:
Доброго дня.
Колупаясь в подарке от Charles Kludge Есть ли на хитрого пользователя таймер с винтом? столкнулся с такой проблемой. Периодически, не всегда но достаточно часто, при запросе серверного времени засыпает функция получения пакета invoke recv, [s], buf, sizeof_buf, 0 . Именно засыпает, потому как до следующей за ней проверки, которую я сам дописал
программа так и не добирается, застревая по видимому где то в недрах функции. Искусственно создать такую ситуацию можно послав несколько повторяющихся запросов в течении короткого промежутка времени. Должно быть на сервере стоит какая то защита что бы один и тот же компьютер не заспрашивал его до усрачки. И он попросту перестаёт отвечать. Но дело в том что это иногда происходит и на первом запросе. После которого консоль висит, время идёт, я чешу репу и недоумеваю. Ведь по логике вещей функция не получив пакета должна показав мне в EAX шиш с маслом завершиться.
Хотелось бы услышать мнения искушённых в подобного рода залипухах людей, как с этим бороться? Какими методами можно возвращать прогу из каматоза для продолжения ну или для повторения запроса?
cmp EAX,48 ; проверить число полученых байт jne Exit ; если несрастуха завершить
Решение задачи: «Как правильно обойти тугодумную функцию recv?»
textual
Листинг программы
if ((r = recv(pd, buf, sizeof(buf), MSG_DONTWAIT)) == -1) { if (errno != EAGAIN) break ; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д