Déjà, ta question n'est pas C++, mais C. C'est même une question indépendante du langage, mais bon, passons, ce n'est pas bien grave.
Disons que si tu as plusieurs threads, tu vas consommer plus de ressources CPU. D'un autre côté, en monothread, les E/S étant synchrones par défaut, si une de tes sockets est lente, tout est ralenti (attention, ne confond pas bloquantes et synchrones, ce n'est pas la même chose).
L'implémentation en threads est très simple, tu n'as qu'à regarder ce post pour te donner une idée:
http://forum.hardware.fr/hardwaref [...] 9401-1.htm
C'est intuitivement la façon qui présente le rapport simplicité/efficacité le plus intéressant si tu as quelques sockets (moins de 20) à gérer, et que tu ne souhaites pas que l'aspect communication ne ralentisse ton programme principal.
Au délà d'une vingtaine de connexions en même temps, ça devient des problématiques systèmes de montée en charge. Et tu te heurtes d'un côté à l'implémentation des threads (en 1:1 ou M:N, avec ou sans lwp, etc). Et de l'autre, à l'utilisation de trucs plus sophistiqués que select(), comme epoll() ou kqueue(), ou des appels système encore plus vicieux.
Comme il est tard et que je vais faire dodo, je te renvoie à ça:
http://www.acme.com/software/thttpd/notes.html#nbio
et ça:
http://bulk.fefe.de/scalability/