Если поток заблокирован на recv()
или send()
, когда сокет закрыт другим потоком, заблокированный поток получит ошибку. Тем не менее, трудно определить правильное корректирующее действие после получения ошибки. Это связано с тем, что номер дескриптора файла, связанный с сокетом, возможно, был получен другим потоком, и теперь заблокированный поток проснулся из-за ошибки «допустимого» сокета. В таком случае проснувшаяся нить должна , а не вызывать close()
сама.
Пробужденному потоку потребуется какой-то способ определить, была ли ошибка сгенерирована соединением (например, сетевая ошибка), который требует, чтобы он вызвал close()
, или если ошибка была сгенерирована другим потоком, вызвав close()
на нем, в этом случае он должен просто выдать ошибку, не делая ничего дальше от сокета.