Odpowiem za kAzka. Chociaż nie znam tych metod i komponentów. Ale stosowałem SimpleTCP pod WinAPI. Tam też są podobne mechanizmy dla serwerów TCP. Chodzi o dostęp do zmiennych w wątkach poprzez sekcje krytyczne. Bo o ile się nie mylę, to gdyby wywyływac te rzeczy bez tego, można by było narobić sobie bałaganu.
W sensie serwer mógłby się zachować w sposób nieprawidłowy i niekontrolowany. Ponieważ było by możłiwe iż inny wątek dostawał by się w identycznym czasie do na przykład listy klientów. I próbował dokonywać na niej operacji łącznie z usuwaniem czy rozłączaniem. Po prostu doszło by do sytuacji gdzie nastepuje niekontrolowany dostęp do tego, czego już na przykład nie ma. Jednak ktoś inny może Tobie jeszcze to dokładniej wytłumaczyć. Poczytaj o sekcjach krytycznych.
Przykładowy wycinek z kodu gdzie używam SimpleTCP i tworzę prosty serwer HTTP. Sam autor zresztą sugeruje taki sposób używania przy pisaniu jakichkolwiek serwerów z użyciem tego modułu.
SList.Lock;
for I := 0 to SList.Count - 1 do
begin
if SList[I] = TTcpSocket(P) then
begin
SList[I].WriteLn(AnswerStr);
SList[I].Close;
end;
end;
SList.Unlock;
end;
Ogólnie fajnie, ze wnikasz. Ale czasami nie powinno się też za bardzo wnikać, tylko pewne rzeczy uznać za pewnik i zalecane. Tymbardziej, że skoro sam autor tak podaje w przykładzie zastosowania jego kodu http://piechnat.pl/index.php/files/highlight/tools/simpletcp/Server.dpr
Podsumowując nie jest zalecane i nie powinno się robić tego inaczej. Chyba, że chce się mieć bubel, a nie porządnie działający serwer. Lepiej praktykować rozwiązania dobrze udokumentowane - jesli się da takie zastosować - a o których wiadomo, że zachowają się jak trzeba. I nie sprawią nam więcej problemów niż gdybyśmy mieli je za nic ;)