1.) Using extension_loaded('mbstring') might make more sense than function_exists('mb_strlen').
2.) mbstring should be an optional dependency in the package.xml
3.) Due to various PHP bugs and how streams are handled internally, you might get better performance setting the SOCKET_READ_BYTES to 8192. I'm not familiar with APNS, so it may be that a larger buffer is never needed as responses are never > 1024 bytes.