Динамический буфер приема функции RECV

Тема в разделе "WASM.NETWORKS", создана пользователем calidus, 3 май 2008.

  1. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Вообщем проблема в том что я захотел сделать динамический буфер приема. Проблема в том что один код с простым буфером не динамическим, принимает и распределяет все на ура !

    А вот второй динамический , который я попытался сделать дает сбои раз через раз. Что это значит? .. А значит то что я резервирую память под данные , они приходят , 1 ый список на ура. Потом когда он расфасован , буфер зарезервированный очищается. Сразу скажу что инфы принимает оч много. А вот второй список уже больше гораздо на вновь резервируемое место не ложица. Ресив вылетает с ошибкой соединение потеряно. Я знаю что дело в буфере , обозначил я его верно , если первый список пришел и расфосовался. Как вариант может мне не хватает зарегеной памяти ? которую я дал на ресив ? Какие еще варианты ?

    Вот привожу код
    Код (Text):
    1. INVOKE  ioctlsocket, socketDESCRIPTOR, FIONREAD, ADDR availablData
    2. .IF eax==NULL
    3.  
    4. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    5. .IF SDELANO==FALSE
    6. ; Резервируем 1Гб в адресном пространстве нашего процесса (это совсем не нагрузит систему)
    7.   mov AllocedMemory, FUNC(VirtualAlloc, 0, 1024*1024*1024, MEM_RESERVE, PAGE_READWRITE)
    8.  ; 0 означает, что Win сама определит по какому стартовому адресу разместить
    9.   ; запрашиваемый блок зарезервированных адресов
    10. mov hMemorys,eax  
    11.    ; Размещаем в нём 10мБ реальной памяти
    12.    invoke VirtualAlloc, AllocedMemory, 10*1024*1024, MEM_COMMIT, PAGE_READWRITE
    13.  
    14.     mov eax,AllocedMemory
    15.     mov shetchik,eax
    16. mov SDELANO,TRUE
    17. .ENDIF
    18. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    19. INVOKE  recv, socketDESCRIPTOR, shetchik, availablData, 0
    20.                               .if eax==SOCKET_ERROR ;ошибка небеда :)
    21.                                   invoke  WSAGetLastError               ; уточняем ошибку :)
    22.                             invoke  FormatMessage,mFlags,Source,eax,Lng,addr Msgstring,bSize,Arg
    23.                         invoke MessageBox,0,addr Msgstring,addr Capt,MB_OK
    24.          
    25.                              jmp mnogo3; тут ничего не меняет так как на выходе идут проверки и если не подходит то выход
    26.                                   .elseif  eax==0
    27.                                ;invoke MessageBox,0,addr errs,addr errs,MB_OK
    28.                              jmp mnogo3
    29.                                    .endif
    А вообще как определить сколько займет места , Скажем все имена папки Систем32 + служебная инфа + время + свойства каждого файла и папки ? ..

    Добавление - Может кто пооптимальнее вариант подскажет и покажет.
    И еще вопрос - Какой лучше символ на самом конце использовать , для решения что все полностью пришло ?
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    ыыыы. в АП процесса может не оказацо столь большого непрерывного куска памяти
     
  3. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    ну это понятно ... ранее ошибок из за этого не было. А что может быть?

    вообще тупой вопрос. Скажем так , это я учту , но вроде проблем с этим не было.
     
  4. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Freeman
    ты прав , почему то именно в этой проге оно слетает. Я сделал 20 ... но всеравно скажем 2 или 3 раза все хорошо. А когда работа с длинными списками , прием списка с систем32 , програ вылетает с ошибкой в ресиве , а потом значок типо мало виртуальной памяти. Странно !!! .. Допустим документ с рассказом занимает 100 кб , а список с систем 32 за 20 магов ??? .. Подскажите что это может быть
     
  5. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Пробуй вот этим методом http://www.wasm.ru/forum/viewtopic.php?id=25836
     
  6. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    мммм..это обыкновенная алокация памяти... уже пробовал , учитывать расширение , так как не все данные сразу приходят сложновато , я пробовал , та же проблема , слишком много данных , и ресив в аут уходит , тут проще 2 команды и все.

    Ну это ладно , мне интерсно почему список имен систем32 более чем 20 метров .. это же пепец , там столько текста уместиться