Чтобы держать сокет открытым нужно не давать устройству уснуть. Устройство быстро разряжается - пользователь негодует. Поэтому, вам придётся разрывать соединение регулярно. Подход стандартный, устройство будится, wakelock захватывается(обязательно с указанием периода), после чего можно делать свои дела. Надо помнить, что если вы не отпустили wakelock и система уснула по таймауту или таймаут был слишком большой, то дальше его могут и не дать.
Другой вариант, переписать взаимодействие с сервером на C. На исполнение нативного кода таких ограничений нет.