Вы можете использовать источники отправки GCD для чтения и записи из сокетов, отслеживать прослушивающий сокет для входящих подключений, но я не мог понять, как использовать источник отправки для подключения сокета?
В псевдокоде он выглядит примерно так:
dispatch_source_t source = dispatch_source_create(DISPATCH_SOURCE_TYPE_WRITE, connectingSocket, ...);
dispatch_source_set_event_handler(source, ^{
// Socket did connect or not
});
fcntl(connectingSocket, F_SETFL, O_NONBLOCK);
connect(connectingSocket, addr, len);
dispatch_source_resume(source);
Это было бы лучше, чем использовать select()
.