Итак, представьте ситуацию, когда клиент читает из сокета и читает возвращает 0. Это означает EOF или что сервер закрыл соединение.Нужно ли клиенту закрывать соединение, когда сервер закрывает соединение
Должен ли клиент также позвонить в этот дескриптор файла? Если клиент не вызывает закрытие, это приводит к утечке дескриптора файла?
Итак, в ядре есть какое-то состояние в ядре, которое все еще сохраняется на клиенте, когда сервер закрывает соединение. Итак, когда клиент называет закрытие, FIN отправляется на сервер? Если да, то даже серверу необходимо сохранить какое-то состояние для этого tcp-соединения, пока клиент не закроет его. – 0xhacker
Да, если сокет был уничтожен, когда удаленный хост закрыл соединение, последующие вызовы попросят ОС для чего-то, чего не существует, и приведет к сбою приложения. Таким образом, «socket» должен существовать до тех пор, пока локальное приложение не вызовет 'close()', даже если соединение исчезло. Соединение существует до тех пор, пока локальное приложение или удаленное приложение не вызовет 'close()' или какой-то другой тайм-аут. –
Использование закрытого сокета * возвращает код ошибки. * Он не вызывает нарушения сегментации или сбоя программы. – EJP