Есть хитрый север(tcp, не блокирующие сокеты), живет на 3х портах через listen(sock, 5) на каждый, далее сокет загоняется в epoll(EPOLLET), как и все сокеты входящих соединений.
Все это обрабатывают 6 потоков, в которых живет epoll_wait, при появлении данных - сразу разбор пакетов и их обработка в принявшем же потоке.
И пока подключений мало 500-1000 - все работает нормально, но когда количество подключений подбирается к 2-2.5к до accept доходят уже не все входящие подключения, при этом запись/чтение в уже подключенные сокеты идет без проблем и задержек.
Смотрел через gdb - почти всегда все потоки висят в epoll_wait, т.е. это не из-за долгой обработки пакетов.
Если наглядно: сразу после accept добавил логов на свой ип, попробовал подключится - connect на клиенте прошел без проблем, на сервере же accept случился только секунд через 30, если вообще случился, чаще клиент отваливается раньше.
На случай чего - tcpdump на сервере показывает попытку подключения сразу.
Собственно что это может быть за колдунство и где его исправлять?