| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks failed
build.yml / winws2 native: send the held batch before the receive loop exits (push) Failing after 0s
Unmodified packets were held until the next receive. On quit and when the logical network disappears upstream leaves windivert_recv() before receiving, so the last run (up to 128 packets) never reached the network. Stress on win10: 20 of 20 stops lost a full run, 2548 packets in total; 0 after the fix. usleep(0), which starts windivert_recv_exit(), now sends the run and polls the control events, as cygwin delivered signals there. This also makes the term event work while the engine waits for a logical network (it used to hang). WinDivertClose forgets the run of the handle without reading the packets. tests/check_upstream.py fails the sync if upstream drops that usleep call. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
| .. | ||
| include | ||
| tests | ||
| args.c | ||
| args.h | ||
| batch.c | ||
| build.sh | ||
| compat.c | ||
| compat.h | ||
| luajit_compat.h | ||
| README.md | ||
| sync-upstream.sh | ||
winws2 без Cygwin
Это форк bol-van/zapret2. Отличие одно: winws2.exe собирается как обычная программа Windows и не требует cygwin1.dll. Файлы автора почти не тронуты, всё своё лежит в этой папке, поэтому правки оригинала подтягиваются автоматически.
Что добавлено
- Сборка под Windows компилятором llvm-mingw прямо на Linux:
nfq2/winnative/build.sh. Результат —binaries/my/winnative-x86_64/winws2.exe, рядом нужны толькоWinDivert.dllи драйвер. - Пакетная отправка. Пакеты, которые движок не менял, возвращаются в сеть пачкой одним вызовом. Отключается переменной окружения
WINWS2_NO_BATCH=1. - Управление без сигналов Linux:
winws2 --wn-signal=<hup|usr1|usr2|term>[:<pid>].hupперечитывает списки,usr1иusr2печатают служебные таблицы,termаккуратно останавливает движок. Без номера процесса команда уходит всем запущенным winws2. - Файл конфигурации любого размера.
@файли$файлчитаются целиком; путь может содержать пробелы и русские буквы. - Быстрый журнал отладки: файл журнала открывается один раз, а не на каждую строку.
Как устроено
compat.hподключается к каждому файлу автора и изображает для него окружение Cygwin.compat.cзаменяет функции Cygwin: файлы с путями в UTF-8, преобразование путей, сигналы.args.cразбирает командную строку и@файлпо тем же правилам, что Cygwin. Отличие: фигурные скобки без кавычек не раскрываются.batch.c— пакетная отправка. Пачка уходит в сеть при следующем приёме, при любой другой отправке и вusleep: с него автор начинает выход из приёма, поэтому при остановке и пропаже сети пакеты не теряются. Там жеusleepпринимает команды управления, так чтоtermработает и пока движок ждёт сеть (--ssid-filter,--nlm-filter).tests/run.sh— проверки разбора аргументов иtests/check_upstream.py: на что в коде автора опирается эта папка. Запускаются на Linux.tests/stop_race.py— серия «запуск — остановка» на Windows: ловит запись опоздавшего пакета в освобождённый буфер при остановке.sync-upstream.sh— подтянуть оригинал, собрать, проверить, отправить.
Сборка
# один раз: распаковать llvm-mingw (вариант msvcrt) в ~/tools/llvm-mingw
nfq2/winnative/build.sh
nfq2/winnative/tests/run.sh
LuaJIT и zlib скрипт скачивает и собирает сам.