Поскольку вы работаете с сырым сокетом, вы фактически не можете определить, когда вы получили полный ответ. Однако в тех же случаях вы можете сделать это с помощью таких протоколов, как http.
В вашем примере вы получаете Content-Length: 0
, который сообщает количество (0) байтов в теле сообщения.
Вы также можете передать заголовок Connection: close
, который закрывает соединение после отправки полного ответа, но я думаю, что это не то, что вы ищете.
Вы также можете просто выполнять операции чтения / записи на двух отдельных потоках.