Document constructor cancellation and link memory ownership

This commit is contained in:
evgeny committed 2026-10-23 22:41:42 +02:00
1 parent 21a4dd7a70
commit 8fe1011da2
2 files changed
+7 -2

No files matched your search

+3 -1
View File
@@ -251,7 +251,9 @@ struct ETCP_CONN {
#define RTT_CB_PERIOD_TB 600000 // 1 минута в 0.1ms
// Создать транспортный объект; жизненным циклом прикладного соединения управляет NCD.
/* Создать транспортный объект в instance, name копируется (может быть NULL).
* Жизненным циклом прикладного соединения управляет NCD. Возвращает объект либо NULL при ошибке/отмене из callback.
* New-connection/NEW callbacks могут закрыть объект; после отмены конструктор завершает закрытие и не возвращает handle. */
struct ETCP_CONN* etcp_connection_create(struct UTUN_INSTANCE* instance, char* name);
#define ETCP_DOWN_TIMEOUT_TB 300000 /* 30 секунд в 0.1 ms */
+4 -1
View File
@@ -407,7 +407,9 @@ void tcp_server_on_link(struct stcp_link *link, struct ETCP_SOCKET *tcp_sock);
// ── Создание, поиск и закрытие линков ──
// Создать линк между сокетом и адресом пира для ETCP_CONN.
/* Создать линк etcp через conn к remote_addr; conn=NULL выбирает исходящий TCP без bind, is_server задаёт роль.
* Уведомляет о создании, для исходящего UDP запускает INIT. Ошибка/close из callback — NULL без живого линка.
* До возврата память принадлежит конструктору: отмена закрывает ресурсы, освобождение завершает конструктор. */
struct ETCP_LINK* etcp_link_new(struct ETCP_CONN* etcp, struct ETCP_SOCKET* conn,
const struct sockaddr_storage* remote_addr, uint8_t is_server);
@@ -416,6 +418,7 @@ struct ETCP_LINK* etcp_link_new(struct ETCP_CONN* etcp, struct ETCP_SOCKET* conn
void etcp_link_update_inflight_lim(struct ETCP_LINK* link, uint32_t new_lim);
/* Снимает линк из списков, отменяет таймеры/STCP и освобождает память до возврата.
* При вызове внутри его конструктора память сохраняется до выхода из конструктора, который вернёт NULL.
* Из callback его закрытия повторный close допустим; после возврата handle недействителен.
* Callback может закрыть ETCP_CONN или соседний линк: вызывающий не должен хранить next через уведомление. */
void etcp_link_close(struct ETCP_LINK* link);