Запись в SocketChannel в CLOSE-WAIT - PullRequest
0 голосов
/ 03 июля 2011

Я заметил, что SocketChannel.write не выдает никаких исключений, когда базовое соединение находится в состоянии CLOSE-WAIT. Это ожидаемое поведение? Если так, как я могу выяснить, что соединение не ESTABLISHED?

1 Ответ

2 голосов
/ 04 июля 2011

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

Ваш прикладной протокол должен быть таким, чтобы либо запись в соединение, закрытое одноранговым узлом, было невозможным, либо многократная запись может быть выполнена до появления ошибки. TCP не может выдать ошибку при первой такой записи.

...