Если вы хотите иметь что-то, что обрабатывает вещи более низкого уровня для вас, посмотрите AsyncSocket. Он полностью асинхронный, обрабатывает ошибки и изменения состояния и использует шаблон делегата, чтобы сообщать, когда что-то происходит.
https://github.com/robbiehanson/CocoaAsyncSocket
(Я бы по-прежнему рекомендовал вам изучить основы работы сокетов, так что сначала написать его самостоятельно - неплохая идея.)