Со стороны интерфейса хочется простое AddMessageHandler(host) и SendMessage(host) для установки обработчика входящих и отправки исходящих сообщений. Думаю, как организовать систему внутри. Неблокирующий ввод/вывод получается слишком сложно, ибо select() осложняется наличием других сокетов в системе, требуется обрабатывать неблокирующий connect, нужно держать буфера для не до конца отправленных/принятых сообщений. Другая идея - потоки. С ними логика упрощается очень значительно, ибо все делается последовательно. Читаем сразу сколько нужно; если ошибка делаем socket/connect заново; пишем тоже сразу сколько есть не пугаясь блокировки. Но по потоку на соединение, думается, будет слишком много, т.е надо делать пул потоков?
Держать кучу соединений
Необходимо одновременно держать кучу исходящих tcp соединений (пусть будет ~500). По соединениям в обе стороны бегают сообщения, обмен полностью асинхронный. Как бы это лучше организовать?



