Dahua NetSDK Ошибка 34: NET_LOGIN_ERROR_MAX_CONNECT — лимит подключений
- Метод
CLIENT_Loginзавершается аварийно с кодом возврата34. - Камера перестает принимать новые соединения от VMS, мобильных приложений DMSS и SmartPSS.
- При проверке активных сокетов на сервере интеграции выявляется огромное количество зависших TCP-дескрипторов в состоянии
ESTABLISHEDилиCLOSE_WAIT. - Новые потоки воспроизведения Realplay не могут быть инициализированы.
1. Аудит открытых сокетов и сессий со стороны клиента
Убедитесь, что приложение корректно закрывает дескрипторы и не создает логин на каждый запрос метаданных:
// Корректный паттерн освобождения ресурсов Dahua SDK
if (lLoginHandle != 0) {
CLIENT_Logout(lLoginHandle);
lLoginHandle = 0;
}
// При завершении работы приложения
CLIENT_Cleanup();2. Анализ TCP сессий на стороне сервера приложений
ss -tanp | grep 37777 | awk '{print $1, $4, $5}' | sort | uniq -c
# Поиск дескрипторов, удерживаемых процессом
lsof -p <PID_ПРОЦЕССА_ИНТЕГРАЦИИ> | grep 37777 | wc -l3. Проверка и завершение активных сессий на устройстве через HTTP API
Выполните запрос активных пользователей к регистратору/камере:
curl -k --digest -u admin:Password123! "http://192.168.1.108/cgi-bin/userManager.cgi?action=getActiveUserInfo"4. Внедрение пула соединений (Connection Pooling)
Запрещено вызывать CLIENT_Login перед каждой атомарной операцией (PTZ, чтение архива, получение конфига). Реализуйте Singleton или пул авторизованных сессий (Handle Pool), поддерживающий Keep-Alive через callback CLIENT_SetAutoReconnect.
Частые вопросы (FAQ)
Каков аппаратный лимит подключений к IP-камерам Dahua?
Большинство IP-камер начального и среднего уровня поддерживают до 10-20 одновременных TCP/SDK соединений и не более 2-4 основных видеопотоков (Main Stream). Регистраторы NVR поддерживают до 64-128 клиентских подключений в зависимости от серии.
Почему соединение зависает на камере при аварийном падении интеграционного сервиса?
Если процесс интеграции завершается аварийно (SIGKILL или crash), TCP Keep-Alive со стороны камеры может удерживать сокет активным до 2 часов. Используйте CLIENT_SetSubconnCallBack и heartbeat пинги для своевременного обнаружения обрывов.
Помогает ли перезагрузка устройства при ошибке 34?
Перезагрузка временно очищает таблицу дескрипторов камеры, однако без устранения утечки handle (CLIENT_Logout) в коде ошибка вернется через короткий промежуток времени.
Как автоматически переподключаться без повторного логина?
Используйте интерфейс CLIENT_Init(DisConnectFunc, 0) и функцию CLIENT_SetAutoReconnect(HaveReConnectFunc, 0). SDK самостоятельно восстановит авторизованную сессию при сетевом сбое.