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