Показать сообщение отдельно
Старый 10.10.2009, 18:03   #32
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

мм, если подумать
Цитата:
//Сколько еще в буфере ?!
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кб, и уже потом пихаються в ньюксор. потеря какой либо части данных теперь исключена. перезалил.
__________________
L2Ext - project closed.

Последний раз редактировалось alexteam, 10.10.2009 в 19:08. Причина: Добавлено сообщение
alexteam вне форума   Ответить с цитированием
За это сообщение alexteam нажился 2 спасибками от: