Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Технологии программирования > Сетевое программирование
Перезагрузить страницу OpenSSL / Проблема с использованием keep alive соединения
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Amur-AS Amur-AS вне форума
Member
 
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.08.2007
Question OpenSSL / Проблема с использованием keep alive соединения - 24.02.2011, 15:42

Написал маленький клиент, который общается с сервером по средством OpenSSL.
Добавил возможность создавать защищенные соединения(ssl-connection).
Все работало замечательно. Но потом озадачился вопрос производительности и дабы ускорить "общение" клиента с сервером решил добавить возможность использования keep alive.
Для SSL соединений все удалось настроить, все замечательно, а вот для обычных ни как:

1. посылаю запрос

XML Код:
POST //G/page HTTP/1.0
Host: kenny
Connection: keep-alive
Keep-Alive: 300
Content-type: application/x-www-form-urlencoded
Content-length: 11

action=misc

2. получаю ответ

XML Код:
HTTP/1.1 200 OK
Server: nginx/0.6.35
Date: Fri, 18 Feb 2011 14:09:27 GMT
Content-Type: text/xml;charset=UTF-8
Connection: keep-alive
Content-Length: 140
Expires: Fri, 18 Feb 2011 14:09:26 GMT
Cache-Control: no-cache

<?xml version="1.0" encoding="UTF-8"?>
...

3. пробую снова отослать 1 запрос
4. но ответа уже не получаю BIO_read возвращает 0

вот код:
cpp Код:
...
ERR_load_BIO_strings();
SSL_load_error_strings();
OpenSSL_add_all_algorithms();
SSL_library_init();

BIO * bio = 0;
bio = BIO_new_connect(ADDRESS":"PORT);
if(bio == NULL)
{
    return 0;
}

if(BIO_do_connect(bio) <= 0)
{
    return 0;
}

/* пробую послать запрос*/
ret = BIO_write(bio, request,reqLen);

size_t bufSize = 1024*1024;
char* buf = new char[bufSize];
size_t readedSize = 0;

/* пробую прочитать ответ*/
for(;;)
{
    p = BIO_read(bio, buf+readedSize, bufSize-readedSize);
    if(p>0)
    readedSize += p;
    if(p==0)
    {
        buf[readedSize] = 0;
        break;
    }
    else if(p < 0)
    {
        ret = BIO_should_retry(bio);
        if(!ret)
        {
            buf[readedSize] = 0;
            break;
        }
        continue;
    }
    else if(bufSize<=readedSize)
    {
        buf[bufSize-1] = 0;
    }
}

/* пробую повторно послать запрос по keep alive соединеню*/
ret = BIO_write(bio, request,reqLen); /* возвращает адекватное число*/
readedSize = 0;
/* пробую прочитать ответ на повторный запрос*/
for(;;)
{
    p = BIO_read(bio, buf+readedSize, bufSize-readedSize); /* возвращает 0*/
    if(p>0)
    readedSize += p;
    if(p==0)
    {
        buf[readedSize] = 0;
        break;
    }
    else if(p < 0)
    {
        ret = BIO_should_retry(bio);
        if(!ret)
        {
            buf[readedSize] = 0;
            break;
        }
        continue;
    }
    else if(bufSize<=readedSize)
    {
        buf[bufSize-1] = 0;
    }
}
...
ВОПРОС:
Что я делаю не так? Может кто то уже сталкивался с аналогичной проблемой.
ps: посылать меня кудато нет смысла - я уже везде был, нигде пока ответа не нашел =\
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с одновременным использованием динамиков и наушников в Windows 7 Zyklon Звук и акустические системы 2 15.03.2012 21:28
Проблема с использованием ОЗУ Nikirepa09 Память 3 27.01.2012 21:00
О мамке asrock alive nf6g vsta и phenom x2 7750+ и phenom x3 8450e+ Mad Guy Материнские платы 10 29.10.2011 12:10
Как установить OpenSSL 0.9.7b? Etr2 Delphi 6 20.07.2010 12:07
Проблема с использованием MetaFile imported_Maya Visual C++ 1 22.04.2009 23:27
Проблема с использованием ISensLogon MuPoB Visual C++ 2 14.04.2009 22:18
проблема с настройкой соединения 2х ноутов по wifi masyan Сетевые подключения 1 17.12.2008 21:57
Подобрать процессор для материнской платы ASRock Alive NF6G-DVI Gradient Процессоры 6 16.09.2008 21:33
Проблема соединения с сервером WingateVPN 6.0.4 Spectrum777 Разное 0 13.04.2008 07:38
Организация клиент-серверного соединения с использованием OpenSSL The One C++ Builder 0 29.01.2004 11:53
Как это реализовать close / keep-alive Anonymous Perl 3 25.07.2003 18:26
Кто силен в openssl??? Помогите! Anonymous PHP 0 08.01.2003 15:49



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов