Здравствуйте. Прошу помощи в следующей проблеме.
Есть 2 приложения общающиеся посредством установленного TCP соединения: клиент и сервер.
В один из моментов общения, когда клиент передает серверу данные, на клиенте возникает событие
FD_CLOSE (через функцию WSAEnumNetworkEvents), причем сервер НЕ разрывает соединение с клиентом по своей воле, т.е. клиент "сам теряет связь". Данная проблема возникает регулярно. Тут стоит заметить, что функционирование комплекса тестировали на разных машинах и подобная проблема "по большей части" возникает лишь на одной( предположили, что как то влияет пропускная способность сетевого канала ). По мере поиска проблемы, все больше приходили к мысле, что разрыв соединения происходит из за слишком частых вызовов send(...) на клиенте. Вставили перед каждым send() функцию Sleep(10) и проблема решилась. НО... в комплексе много параметров, влиящих на кол-во передаваемых от клиента к серверу данных. И при модификации этого параметра в сторону увеличения кол-ва данных Sleep(10) уже не спасает. Да и вообще, какой-то уж слишком грязный и ненадежный хак получился... Может есть какие мысли?
P.S.1 Вот еще дополнительная информация, при приходе события FD_CLOSE, проверяли последную ошибку на запись(FD_WRITE_BIT) и она гласила "Недопустимые данные( код ошибки 13)"
P.S.2 Архитектура комплекса следующая: пакетов много, но они маленькие( примерно 40 байт ) — т.е. может это играет свою роль?
P.S.3 Насчет генерации FD_CLOSE. Забыл написать, что событие это возникает в результате WSAECONNABORTED( = "Software caused connection abort.
An established connection was aborted by the software in your host computer, possibly due to a data transmission time-out or protocol error" — MSDN).