Вообщем проблема в том что я захотел сделать динамический буфер приема. Проблема в том что один код с простым буфером не динамическим, принимает и распределяет все на ура ! А вот второй динамический , который я попытался сделать дает сбои раз через раз. Что это значит? .. А значит то что я резервирую память под данные , они приходят , 1 ый список на ура. Потом когда он расфасован , буфер зарезервированный очищается. Сразу скажу что инфы принимает оч много. А вот второй список уже больше гораздо на вновь резервируемое место не ложица. Ресив вылетает с ошибкой соединение потеряно. Я знаю что дело в буфере , обозначил я его верно , если первый список пришел и расфосовался. Как вариант может мне не хватает зарегеной памяти ? которую я дал на ресив ? Какие еще варианты ? Вот привожу код Код (Text): INVOKE ioctlsocket, socketDESCRIPTOR, FIONREAD, ADDR availablData .IF eax==NULL ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .IF SDELANO==FALSE ; Резервируем 1Гб в адресном пространстве нашего процесса (это совсем не нагрузит систему) mov AllocedMemory, FUNC(VirtualAlloc, 0, 1024*1024*1024, MEM_RESERVE, PAGE_READWRITE) ; 0 означает, что Win сама определит по какому стартовому адресу разместить ; запрашиваемый блок зарезервированных адресов mov hMemorys,eax ; Размещаем в нём 10мБ реальной памяти invoke VirtualAlloc, AllocedMemory, 10*1024*1024, MEM_COMMIT, PAGE_READWRITE mov eax,AllocedMemory mov shetchik,eax mov SDELANO,TRUE .ENDIF ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ INVOKE recv, socketDESCRIPTOR, shetchik, availablData, 0 .if eax==SOCKET_ERROR ;ошибка небеда :) invoke WSAGetLastError ; уточняем ошибку :) invoke FormatMessage,mFlags,Source,eax,Lng,addr Msgstring,bSize,Arg invoke MessageBox,0,addr Msgstring,addr Capt,MB_OK jmp mnogo3; тут ничего не меняет так как на выходе идут проверки и если не подходит то выход .elseif eax==0 ;invoke MessageBox,0,addr errs,addr errs,MB_OK jmp mnogo3 .endif А вообще как определить сколько займет места , Скажем все имена папки Систем32 + служебная инфа + время + свойства каждого файла и папки ? .. Добавление - Может кто пооптимальнее вариант подскажет и покажет. И еще вопрос - Какой лучше символ на самом конце использовать , для решения что все полностью пришло ?
ну это понятно ... ранее ошибок из за этого не было. А что может быть? вообще тупой вопрос. Скажем так , это я учту , но вроде проблем с этим не было.
Freeman ты прав , почему то именно в этой проге оно слетает. Я сделал 20 ... но всеравно скажем 2 или 3 раза все хорошо. А когда работа с длинными списками , прием списка с систем32 , програ вылетает с ошибкой в ресиве , а потом значок типо мало виртуальной памяти. Странно !!! .. Допустим документ с рассказом занимает 100 кб , а список с систем 32 за 20 магов ??? .. Подскажите что это может быть
мммм..это обыкновенная алокация памяти... уже пробовал , учитывать расширение , так как не все данные сразу приходят сложновато , я пробовал , та же проблема , слишком много данных , и ресив в аут уходит , тут проще 2 команды и все. Ну это ладно , мне интерсно почему список имен систем32 более чем 20 метров .. это же пепец , там столько текста уместиться