В целом неплохо..
Таймаут........

реально необходим при работе с прокси, какие бы мегаприват они не были...
В качестве размышления вяжем к таймеру (1сек):
timeout - внутренний интежер каждого потока
MaxTimeOut - таймаут задается в настрйках
Перед коннектом в каждом потоке timeout:=0;
////--------OnTimer----------
for i:=1 to MaxThreads do
begin
if thread[i].timeout>=MaxTimeOut then
begin
thread[i].timeout:=0;
thread[i].Socket.Close;
end
else inc(thread[i].timeout);
end;
Сокет возвращает ошибку SOCKET_ERROR , и цикл продолжается /начинается заново/...
Со вторыми винсоками не работал, но для первых это самое рациональное решение что нашел...