From 635fea6ab3119c5d4cc36bae7568a85958dd2381 Mon Sep 17 00:00:00 2001 From: t0xa Date: Tue, 24 Mar 2026 12:39:02 +0300 Subject: [PATCH] C: accept function flow --- clang/network/accept.puml | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 clang/network/accept.puml diff --git a/clang/network/accept.puml b/clang/network/accept.puml new file mode 100644 index 0000000..3dc6e02 --- /dev/null +++ b/clang/network/accept.puml @@ -0,0 +1,38 @@ +@startuml +title accept() — принятие TCP-соединения + +participant "Client" as C +participant "OS Kernel" as K +participant "Server" as S + +== Подготовка сервера == +S -> K: socket() +S -> K: bind() +S -> K: listen()\n(создаёт очередь входящих соединений) + +== Входящее соединение == +C -> K: connect() +K -> K: TCP 3-way handshake\n(SYN → SYN-ACK → ACK) +K -> K: Помещает соединение\nв очередь (backlog) + +note right of K + Соединение завершено на уровне ОС, + сервер ещё не знает об этом +end note + +== Принятие соединения == +S -> K: accept()\n(блокируется, если очередь пуста) +K --> S: возвращает новый fd\n(connected socket) + +note right of S + Оригинальный listening socket + продолжает принимать новые + соединения +end note + +== Обмен данными == +S <-> C: read() / write()\nчерез новый fd + +S -> K: close(connected_fd) + +@enduml