C: accept function flow
This commit is contained in:
parent
b48234194c
commit
635fea6ab3
1 changed files with 38 additions and 0 deletions
38
clang/network/accept.puml
Normal file
38
clang/network/accept.puml
Normal file
|
|
@ -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
|
||||
Loading…
Reference in a new issue