Mam problem, otóż moja aplikacja dziala na zasadzie proxy, ruch pakietów w aplikacji wygląda mniej więcej tak aplikacja<>mój program<>server, by się połączyć z serverm musiałem ustawić wartość ctBlocking(połączenie synchroniczne) dla ClientType w komponencie TClientsocket, i teraz działa to na zasadzie 1 pakiet wysłany, 1 odebrany, ale niestety server wysyła czasem więcej niż 1 pakiet między "wysłanami" od klienta, a zdarzenie OnRead nie zachodzi dla komponentu ClientSocket(chyba wina asynchroniczności?). Dlatego użyłem poniższej procedury(właścwie fragementu w którym jest pętla) w zdarzeniu OnRead dla TServerSocket, by jakoś odbierać pakiety i chodzi ona idealne do czasu(5-15min) kiedy nie pojawi się wiadomość "Stack overflow". I teraz mam pytanie co zrobić by program się nie sypał, lub w jakiś inny sposób by odbierać pakiety?

kodzik:

procedure TForm1.ServerClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
 vLen, a, zKlienta, zServera:Integer;
 SBuffer: array[1..8192] of byte;  //8kb buffer
 RBuffer: array[1..8192] of byte;  //8kb buffer
begin
//Zerowanie tablicy
 FillChar(SBuffer, sizeof(Sbuffer), 0);
 FillChar(RBuffer, sizeof(RBuffer), 0);

//Odbierz pakiet z klienta
 vLen:= Socket.ReceiveBuf(SBuffer, sizeof(SBuffer));

//Wyslij pakiet do servera
 Client.Socket.SendBuf(SBuffer, vLen);

//otrzymaj dane od servera
 vLen:= Client.Socket.ReceiveBuf(RBuffer, sizeOf(RBuffer));

//Wyslij do klienta
 Socket.SendBuf(RBuffer, vLen);

//Zerowanie tablicy
 FillChar(SBuffer, sizeof(Sbuffer), 0);
 FillChar(RBuffer, sizeof(RBuffer), 0);

//Wymieniaj pakiety
// W tej pętli pojawia się błąd(przynamniej tak mi sie wydaje)

 while Client.Socket.Connected do
  Begin
   zServera := Client.Socket.ReceiveLength;
   zKlienta := Server.Socket.ReceiveLength;
    If zServera>0 then
      Begin
        vLen := Client.Socket.ReceiveBuf(RBuffer, sizeof(RBuffer));
        Socket.SendBuf(RBuffer, vLen);
      End;
    If zKlienta>0 then
      Begin
        vLen := GameServer.Socket.ReceiveBuf(SBuffer, sizeof(SBuffer));
        Client.Socket.SendBuf(SBuffer, vLen);
      End;
   Application.ProcessMessages; //A ta linijka to chyba przyczyna tylko nie wiem czemu?
  End;

Edit: Prawdopodobnie rozwiązałem już ten problem(prawdopodobnie, bo program nie wykrzaczył się już od 45min :-D ), więc nie musicie się już męczyć, chyba że ktoś ma jakiś ciekawy pomysł :>