Не должно вызывать исключение в первый раз. Соединение все еще может быть доступно для записи. CLOSE_WAIT означает, что входящий FIN был получен. Все это означает, что другой конец завершил запись . Возможно, он все еще читает: он может только отключить соединение для вывода. Так что TCP должен записывать данные. Если одноранговый узел закрыл все соединение, он выдаст RST при получении записи, что произойдет в качестве сброса соединения при последующей записи.
Ваш прикладной протокол должен быть таким, чтобы либо запись в соединение, закрытое одноранговым узлом, было невозможным, либо многократная запись может быть выполнена до появления ошибки. TCP не может выдать ошибку при первой такой записи.