TGViewer
Серверная Админа | Компьютерные сети Серверная Админа | Компьютерные сети @school_network · 26.6K subscribers
Post #2509 6.09K
👋 Привет, сетевой друг!

Сегодня продолжим обсуждать инструмент
wsock-trace. Разберем, как использовать инструмент на деле.

🟣Подключаем библиотеку правильно: Вместо стандартной ws2_32.lib приложение нужно линковать с wsock-trace:

wsock_trace-x64.lib   // для x64
wsock_trace-x86.lib // для x86


Сборка выполняется из каталога src:

nmake -f makefile.vc6


Критично, чтобы бинарь собирался с debug-символами:

cl /Zi /Zo source.c wsock_trace-x64.lib
link /debug


Без PDB стек вызовов и строки кода восстановлены не будут.

🟣Смотрим инициализацию сетевого стека: Первое, что видно в трейсе - реальный момент старта Winsock:

WSAStartup(MAKEWORD(2,2), &wsa);


В выводе сразу видно, где именно в коде произошёл вызов, и не инициализируется ли стек несколько раз разными библиотеками.

🟣Анализируем создание и настройку сокетов. Создание сокета:

socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);


Перевод в неблокирующий режим:

ioctlsocket(sock, FIONBIO, &mode);


Установка опций:

setsockopt(sock, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger));
setsockopt(sock, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));


wsock-trace сразу показывает неверные аргументы, которые в обычных логах не видны.

🟣Диагностика зависших connect и select. Установка соединения:

connect(sock, (struct sockaddr*)&addr, sizeof(addr));


Работа с ожиданием событий:

select(nfds, &readfds, &writefds, NULL, &timeout);
FD_ISSET(sock, &readfds);


В трейсе видно, был ли WSAEWOULDBLOCK, какие fd реально готовы и почему код застрял в ожидании, хотя «по логике» не должен.

🟣Передача данных и тайминги. Отправка и приём:

send(sock, buf, len, 0);
recv(sock, buf, len, 0);
recvfrom(sock, buf, len, 0, &from, &fromlen);


Каждый вызов сопровождается точным таймстемпом через QueryPerformanceCounter, количеством байт и направлением трафика. Это позволяет увидеть, где именно появляются задержки.

При необходимости можно искусственно замедлить сеть через конфиг:

recv_delay = 50
send_delay = 20


Серверная Админа | #Инструмент
  • 👏 12
  • ❤ 4
More from @school_network
  1. Oct 3, 2026Post #2894
  2. Oct 2, 2026👋 Привет, сетевой друг! Ещё три функции MikroTik, которые легко пропустить, пока не столк…
  3. Oct 2, 2026Для тех, кто работает с Kubernetes и облачной инфраструктурой, в октябре намечается отличн…
  4. Oct 1, 2026👋 Привет, сетевой друг! Сегодня про UUCP - протокол и набор утилит, через которые Unix-ма…
  5. Sep 30, 2026👋 Привет, сетевой друг! Давай разберём несколько TCP-флагов и состояний, которые особенно…
  6. Sep 29, 2026👋 Привет, сетевой друг! Сегодня про webcensus - инструмент для довольно специфичной задач…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →