# Лабораторная работа 4. Сетевые соединения. Сокеты Вариант из лабораторной работы 1: рекурсивная сортировка разделением. Программа строит дерево процессов. Каждый внутренний процесс открывает TCP `ServerSocket` на `127.0.0.1` с портом `port_base + pid % span`, порождает двух потомков через `fork()`, принимает от них локальные соединения и передает им левую и правую части массива. По умолчанию `port_base = 20000`. Это сделано из-за того, что чистый порт `pid` может оказаться меньше 1024 и потребовать root-права. Формула соответствует замечанию из задания про `ServerSocketBase + `. ## Формат обмена Родитель отправляет потомку: 1. `uint32_t depth` — глубина рекурсии потомка; 2. `uint64_t size` — размер массива; 3. `int32_t array[size]` — часть массива. Потомок возвращает: 1. `uint64_t counter` — счетчик операций сравнения при слиянии; 2. `uint64_t size` — размер отсортированной части; 3. `int32_t array[size]` — отсортированная часть; 4. `uint64_t processes` — расширение для статистики количества процессов. Первые три поля ответа соответствуют заданию: счетчик / размерность / массив. ## Сборка и запуск ```bash make ./lab4 --size 10000 --depth 3 --min-size 1 ``` Полезные параметры: ```bash ./lab4 --size 1000 --depth 2 --min-size 16 --seed 42 --print ./lab4 --size 2048 --depth 2 --min-size 64 --log ./lab4 --size 10000 --depth 3 --port-base 30000 ``` ## Проверка ```bash make test ``` В конце программа печатает статистику в `stderr`: ```text STAT: size=... depth=... min_size=... processes=... counter=... valid=1 time=... sec ``` `valid=1` означает, что итоговый массив действительно отсортирован.