Вы спрашиваете много, не рассказывая много о вашем случае использования.Из того, что вы пишете, кажется, вам нужно сделать обмен сообщениями между компьютерами, подключенными к сети.Это все одноранговые, или одни машины "серверы", а другие клиенты?Такие библиотеки, как ACE, предлагают все: от простых удобных классов для упаковки любого типа сокетной связи и многопоточности до полнофункциональных серверов с использованием практически любой модели, о которой вы только можете подумать.
Если вам нужны какие-то серверы,весь спор о том, следует ли вам использовать многопоточность или однопоточную асинхронность.Опять же, в зависимости от варианта использования, один будет «лучше» другого (это действительно зависит от того, что вам нужно сделать).
В сетевой части вам нужны надежные заказанные сообщения или каждыйсообщение устарело к тому времени, когда вы сможете обнаружить, что пакет потерян?Для надежности вы обычно строите поверх TCP, но в зависимости от того, что вам нужно сделать, вы можете разработать протокол на UDP, который будет работать быстрее.
Если ваши требования не являются действительно простыми и базовыми, и / иливы уже писали много многопоточного сетевого кода, и вам, скорее всего, лучше использовать хорошо написанный пакет, чем пытаться изобретать все самостоятельно.