Я использую сокеты UDP через код C ++ и использую NDK.
У меня есть постоянный механизм пинг-понга (keep-alive) для поддержания активного соединения в моем протоколе.
У меня есть один поток, который постоянно ищет входящие сообщения с сервера, который работает бесконечно.
while(true){
..... some code
int llen = recvfrom(fd, buf, BUFLEN, 0, (const sockaddr *)&si_other, (socklen_t*)&slen);
..... some code
}
Связь работает хорошо, если я держу время для пинг-понга до почти 30 секунд , даже если устройство не используется.
Но если я установлю время пинг-понга на 10 минут, и если сервер отправит некоторые данные на 7-й минуте. Он не доходит до клиента (устройства Android), даже если ip / порт устройства находится в состоянии ожидания.
Примечания:
- Мне нужно пинг-понг на 10 минут.
- Я использую частичную блокировку после пробуждения.
- Я не могу использовать push-уведомления через firebase.
- Доза не влияет, так как мое приложение занесено в белый список.
- Я также использую AlarmManager для отправки пинг-понга.
Каким может быть решение проблемы, с которой я сталкиваюсь? Любая идея будет хорошей.