Разъем UDP c ++ недоступен через несколько минут Android - PullRequest
0 голосов
/ 02 июля 2018

Я использую сокеты 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 для отправки пинг-понга.

Каким может быть решение проблемы, с которой я сталкиваюсь? Любая идея будет хорошей.

...