Потому что:
- Если такая возможность вообще нужна, она нужна на уровне TCP, а не только на уровне SSL.
- Для этого нет APIуровень TCP, и я имею в виду не только Java: для него также нет API уровня C, за исключением, может быть, на нескольких платформах.
- Если вы добавили его на уровне SSL, тайм-аут записисобытие оставило бы соединение в неопределенном состоянии, что означало бы, что оно должно быть закрыто, потому что вы не могли знать, сколько данных было передано, и вы не могли поддерживать целостность на уровне SSL.
Чтобы ответить на ваши конкретные вопросы:
- Может ли быть ситуация, когда операция записи может навсегда заблокировать поток?Я проверил в интернете, и кажется, что есть возможность блокировки навсегда.
Да.Я видел приложение, заблокированное в течение нескольких дней в такой ситуации.Хотя нет, как правильно говорит @StephenC, навсегда.Мы еще не жили так долго.
Как добавить время ожидания для операции записи?
Вы можете сделать это на уровне TCP с неблокирующим вводом / выводом и Selector
, а также можете наложить слой SSLEngine
вдобавок к этому, чтобы получить SSL, но это утомительное и очень подверженное ошибкам упражнение, которое многие пытались: немногие преуспели.Не для слабонервных.