по повуду закрытия если надо зактыть сокет и чтоб потом он не висел пока ядро его не закроет делай так: void __fastcall set_linger(SOCKET as)...
за алгоритмами топай сюда http://algolist.manual.ru/ :) ЗЫ.там много чего есть.
Имена участников (разделяйте запятой).