Кажется, я решил эту проблему, перестав спать 1 мс и повторяя результат WSAGetOverlapped, когда он сообщает о WSASYSCALLFAILURE.
У меня была другая проблема, связанная с срабатыванием перекрывающихся событий, хотя нет данных, которые я такжедолжен был решить первым.Теперь тест выполняется более часа, и несколько WSASYSCALLFAILURE обрабатываются правильно.Надеемся, что и ночной тест также будет успешным.
@ Len: еще раз спасибо за вашу помощь.
РЕДАКТИРОВАТЬ: Ночной тест прошел успешно.Моя ошибка была вызвана двумя взаимозависимыми проблемами:
Проблема 1: WaitForMultipleObjects в ConnectionSet :: select иногда сигнализирует данные на пустом сокете, вызывая тупиковую блокировку SocketConnection :: readSync.Исправление: Выполните неблокирующее чтение первого байта каждого пакета.Сбросить ConnectionSet, если сокет был пустым
Проблема 2: WSAGetOverlappedResult иногда возвращает WSASYSCALLFAILURE, вызывая несинхронизацию в потоке TCP.Исправление: Повторите WSAGetOverlappedResult после небольшого периода сна.
http://equalizer.svn.sourceforge.net/viewvc/equalizer?view=revision&revision=4649