мм, если подумать
Цитата:
//Сколько еще в буфере ?!
ioctlsocket(thisTunel.serversocket, FIONREAD, Longint(BytesInStack));
if BytesInStack = 0 then
BytesInStack := 1;
presize := recv(thisTunel.serversocket, PreAccumulator[0], BytesInStack, 0);//Читаем 1 байт или весь буффер сразу
LastResult := PreSize;
if lastresult > 0 then
begin
ioctlsocket(thisTunel.serversocket, FIONREAD, Longint(BytesInStack));
if BytesInStack > 0 then //Дочитываем
LastResult := LastResult + recv(thisTunel.serversocket, PreAccumulator[presize], BytesInStack, 0);
end;
|
если подряд приходит 2 порции данных суммарным объемом БОЛЕЕ чем 63кб. кусок данных после 63кб отсекается, и как следствие - клиент просто обязан "повиснуть", да и в сокетном движке будет происходить чертешо.
щас попытаюсь такую ситуацию учесть.
Добавлено через 25 минут
учел. при приходе большой порции данных, они режуться по 63кб, и уже потом пихаються в ньюксор. потеря какой либо части данных теперь исключена. перезалил.