Clarify independent RX watchdog and sleep-aware graceful close deadlines
This commit is contained in:
1 parent
24c64967fd
commit
6704a18897
2 files changed
+10
-6
No files matched your search
@@ -15,8 +15,8 @@ extern "C" {
|
||||
* Обычный keepalive (normal-режим) и спячка (standby) — раздельные механизмы
|
||||
* (разные таймеры, разный код):
|
||||
*
|
||||
* normal: периодический flagless-keepalive (адаптивный период) + dead-link
|
||||
* по keepalive_timeout. Активен только когда бодрствуют обе стороны.
|
||||
* normal: периодический flagless-keepalive (адаптивный период).
|
||||
* Отправка активна только когда бодрствуют обе стороны.
|
||||
*
|
||||
* standby (спящий узел): периодический flagless НЕ шлётся вовсе. На фазовых
|
||||
* переходах duty-cycle (SLEEP 120с / ACTIVE 2с) шлётся анонс
|
||||
@@ -25,6 +25,10 @@ extern "C" {
|
||||
* KA_SLEEP_MIN_ATTEMPTS). Кумулятивные провалы (сброс по ACK) — при
|
||||
* KA_SLEEP_MAX_FAILS → link down (детект мёртвого пира в спячке).
|
||||
*
|
||||
* RX watchdog: отдельный конечный deadline работает в обоих режимах. Учитывает
|
||||
* объявленный ACTIVE+SLEEP и keepalive_timeout; фазы и отправки его
|
||||
* не продлевают. Пробуждение сразу сокращает срок до normal timeout.
|
||||
*
|
||||
* Формат пакета:
|
||||
* data[0] = ETCP_KEEPALIVE (0x08)
|
||||
* data[1] = flags (bit0 = KA_FLAG_SLEEP — «я сплю», bit1 = KA_FLAG_SLEEP_ACK — ответ)
|
||||
|
||||
@@ -611,8 +611,8 @@ static void ncd_cancel_deliver_up(struct NODE_CONN_DIRECT* h, struct UASYNC* ua)
|
||||
/*
|
||||
* fin_wait — состояние ожидания подтверждения закрытия от пира.
|
||||
* Вызывающая сторона: мы отправили CLOSE и ждём ответа (KEEP_ALIVE или DOWN).
|
||||
* Максимальное время ожидания — NCD_FIN_WAIT_TIMEOUT_TB (5 сек), после чего
|
||||
* соединение форсированно закрывается.
|
||||
* Обычное ожидание — NCD_FIN_WAIT_TIMEOUT_TB (5 сек); объявленный сон продлевает
|
||||
* его до RX deadline живого линка. По истечении закрываем транспорт.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -627,7 +627,7 @@ static void ncd_fin_wait_cancelled(struct ETCP_CONN* conn, void* arg) {
|
||||
}
|
||||
|
||||
/*
|
||||
* Таймаут fin_wait: peer не ответил на CLOSE за NCD_FIN_WAIT_TIMEOUT_TB (5 сек).
|
||||
* Таймаут fin_wait: peer не ответил на CLOSE в отведённый срок с учётом сна.
|
||||
* Форсированно закрываем conn и освобождаем entry — соединение разорвано
|
||||
* без подтверждения от пира.
|
||||
*/
|
||||
@@ -1125,7 +1125,7 @@ int node_conn_direct_open_node(struct UTUN_INSTANCE* inst, uint64_t node_id,
|
||||
*
|
||||
* Если это был последний handle (handle_count стал 0):
|
||||
* - Запускается протокол graceful shutdown: пиру отправляется CLOSE, conn
|
||||
* переводится в fin_wait, ставится таймер на 5 сек.
|
||||
* переводится в fin_wait, ставится таймер на 5 сек либо до пробуждения пира.
|
||||
* - Если пир ответит KEEP_ALIVE (у него ещё есть handle'ы) — conn останется жив,
|
||||
* просто без наших handle'ов.
|
||||
* - Если пир не ответит — conn закрывается форсированно по таймауту.
|
||||
|
||||
Reference in new issue
Block a user