I would actually think your patch consumes even more battery: 1.- Instead of waiting for the I/O system to announce to the application there are bytes pending for reading in the network device, you're polling the network device every second with a timer. 2.- You're polling even when you're not connected. That's why you had to verify if socket is valid (and you used NULL in a C++ program like it were a C program). There's no way to call read() with an invalid socket object since the object had to trigger a signal and to do that it *has* to be valid. So I'm not sure about this patch.