![]() |
|
Модераторы: feodorv |
![]()
|
|
| nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Есть программа - winsocket-TCP-клиент, многопоточный, работает через SSL. Использовал библиотеку OpenSSL. Но при работе постоянно возникают Access Violations при доступе к памяти, и возникают они именно в OpenSSL. Эту библиотеку я скачал уже в собранном виде - т.к. сам не разобрался, как ее собирать.
Скорее всего эти Вайолейшоны возникают из-за того, что программа работает в условиях, где довольно часто получает отказ в выделении памяти - сервер очень загружен. Вот пример стека при Access Violation: libeay32.dll!10048347() [Frames below may be incorrect and/or missing, no symbols loaded for libeay32.dll] libeay32.dll!100485cb() libeay32.dll!1004a75d() libeay32.dll!1004aed0() ntdll.dll!7c82f9dd() msvcr80.dll!free(void * pBlock=0x1000234d) Line 110 C > msvcr80.dll!free(void * pBlock=0x1070e894) Line 115 + 0x5 bytes C libeay32.dll!100497e3() libeay32.dll!1004ae6a() libeay32.dll!1004b6b2() libeay32.dll!1004b6aa() ssleay32.dll!0033a40e() ssleay32.dll!00349e84() ssleay32.dll!0033fbb0() ssleay32.dll!0033fe75() ssleay32.dll!00349e84() myapp.exe!CRequest::MakeRequest(const char * location=0x018bc9d8, const char * par_szQueryString=0x018bf4d8, char * buf=0x018be110, unsigned long max_len=5000, bool bSecure=true) Line 1030 + 0xc bytes C++ Подскажите пожалуйста более надежную альтернативу SSL-библиотеки, либо где взять версию OpenSSL без этих глюков. Я использую версию ssleay32.dll - 0.9.8.4 Очень нужно. Спасибо! Это сообщение отредактировал(а) nerdy_weirdie - 22.2.2008, 17:20 |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 1 Всего: 162 |
У меня нет слов. Отказ в выделении памяти стал уже штатной ситуацией? Перечисли мне, пожалуйста, программные продукты, которые ухитряются работать нормально, если периодически получают отказ в памяти? |
|||
|
||||
| nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Спасибо за ответ. Сори, я может неточно выразился. Я имею ввиду ситуацию, когда оператор new выбрасывает MemoryException, либо маллоки там всякие NULL возвращают. Обычно, грамотно написанное приложение умеет справляться с такой ситуацией.. По крайней мере, я всегда стараюсь обрабатывать эту ситуацию. |
|||
|
||||
| JackYF |
|
||||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 1 Всего: 162 |
Эта ситуация называется "крах системы". Самое большее, что программа может в этом случае сделать, это более-менее корректно завершится и не повредить данные, с которыми оперирует.
И как истории успеха? На практике проверял, что твои обработчики работают? Каждый new/malloc в программе так проверяешь? |
||||
|
|||||
| nerdy_weirdie |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Незнаю, крах ли это Обрабатываю очень просто - вместо new использую макрос который в случае отказа ненадолго замораживает поток, и затем делает следующую попытку, а чтобы избежать Access Violations - поубирал всю инициализацию из конструкторов, потому как отлавливал ситуацию, когда они даже при отказе вызывались, - вполне эффективно Это сообщение отредактировал(а) nerdy_weirdie - 22.2.2008, 18:48 |
||||||
|
|||||||
| nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
хм.. а может есть какой-то способ установить процессу такой приоритет, когда система не имеет права отказать ему в памяти?
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 1 Всего: 162 |
Эх, как страшно жить. Ну да ладно. Если винда такая жестокая...
Если памяти нет, то хоть заприоритеться |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
может стоит вообще подумать о замене CRT, в частности менеджера памяти... например посмотреть на quiсkHeap на RSDN была такая ...
есть еще libssh-2 (http://www.libssh2.org/wiki/index.php/Main_Page)...
Это сообщение отредактировал(а) jonie - 22.2.2008, 23:02 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| luzver |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 23.2.2008 Репутация: нет Всего: нет |
А не могли бы сырцом поделиться, мне нужно что-то очень простое для криптования потока http\https
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
есть туча https серверов с такими возможностями от 900 строк кода, кроме того есть пример в openSSL
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |