winsock-client-walkthrough.js
Loading canvas…
Минимальный TCP-клиент на Winsock по шагам: WSAStartup, getaddrinfo, socket, connect, send, shutdown, recv, closesocket. Endpoint появляется в kernel space ровно на вызове socket(), соединение с сервером — на connect().
Минимальный TCP-клиент на Winsock, разобранный по вызовам. Схема отвечает на
один вопрос: какой объект меняется после каждой строки. До socket() в
ядре нет ничего. До connect() нет соединения.
| Нода | Роль |
|---|---|
app | Код клиента: последовательность вызовов |
buf | sendbuf и recvbuf — память процесса, не ядра |
handle | ConnectSocket — число в процессе, непрозрачная ручка |
endpoint | Сам объект в ядре, на который ручка ссылается |
server | Удалённая сторона, порт 27015 |
getaddrinfo превращает имя и порт в список адресов. Для
имени это поход в DNS; для литерала 127.0.0.1 резолвер до DNS не доходит,
а порт берётся из таблицы служб.SOCKET не указатель и не адрес удалённой стороны.send() означает локальное принятие, а не доставку.SD_SEND закрывает только отправку. Приём жив, ответ придёт.recv скопировал его в recvbuf.closesocket освобождает handle, WSACleanup выгружает
Winsock.Три объекта нельзя смешивать: user buffer живёт в процессе, SOCKET — это
число, а endpoint с очередями живёт в ядре. Успешный send() не означает
доставку. recv() == 0 — это orderly close от peer, а не ошибка.
Winsock: WSAStartup, getaddrinfo, socket, connect, send, shutdown,
recv, closesocket.
Введите числа или выберите пресет