Я столкнулся с проблемой в приложении с открытым исходным кодом (quickfix 1.13.3) при попытке прочитать данные, отправленные в сокет через определенный порт.
Проблема возникает, когда сервер отправляет данные и закрывает сокет сразу после него.
Тогда мой код не может прочитать последние отправленные данные, и выдается ошибка 10054.
Обратите внимание, что я могу нормально получать, если сервер не закрывает сокет.
Это код, который я использую для получения данных с сервера в ожидании вашей помощи;
int size = recv( m_socket, m_buffer, sizeof(m_buffer), 0 );
Обратите внимание, что если я использую TCPClient для получения данных, он работает просто отлично, но это приведет к созданию другого приложения быстрого исправления, что означает потерю месяцев тяжелой работы и больше месяцев для создания приложения, аналогичного быстрому исправлению.
Если сервер вызвал отправку RST, семантическая цель состоит в том, чтобы потерять все данные в полете. Сервер обычно не занимается этим. Проблема в этом. На стороне клиента вы ничего не можете с этим поделать, за исключением возможности использовать больший буфер приема сокета, чтобы изменить управление окнами и быстрее читать.
Других решений пока нет …