diff --git a/src/transport_layer/etcp.h b/src/transport_layer/etcp.h index 0a67870a..350982c5 100644 --- a/src/transport_layer/etcp.h +++ b/src/transport_layer/etcp.h @@ -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 */ diff --git a/src/transport_layer/etcp_connections.h b/src/transport_layer/etcp_connections.h index 85c39472..aabc5c45 100644 --- a/src/transport_layer/etcp_connections.h +++ b/src/transport_layer/etcp_connections.h @@ -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);