Проблема с простой остановкой там, где чтение зависает, состоит в том, что это может произойти в 2 случаях:
1: на сервере больше нет данных для отправки
2: сервер отправил больше данных, но ваш клиент еще не получил их из-за перегрузки сети.
И вы действительно хотите остановить чтение только в первом случае, но вы хотите, чтобы чтение блокировалось во втором случае.
Способ решения этой проблемы заключается в создании протокола передачи (стандартного), который позволяет серверу сообщать клиенту, сколько данных он ожидает отправить.
Если сервер заранее знает общий размер данных, просто начните с отправки общего количества байтов в передаче, а затем отправьте данные. Таким образом, клиент знает, когда он получил все данные.
(Или сервер может просто закрыть соединение, когда закончите. Таким образом, read
должен потерпеть неудачу, но это будет работать, только если в будущем вам не нужно соединение)