The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Программирование openssl"
Отправлено Towellie, 18-Янв-09 07:10 
Прошу прощения я не правильно вставил код.
Вобщем почитал я тут поэксперементировал немного - некоторые вещи прояснились переделал код - в общем я в обе стороны могу передавать, но возникла следующая трудность:
Код подкючения и тд и тп я писать не буду - он рабочий осталость только понять как работают BIO_read + BIO_write вобщем
Идея следующая - код записи и чтения везде одинаковый на одной стороне считать а потом записать а на втором конце соответственно наоборот.
Получается следующая картина:
./send
Sending Hello server
End writing
lets reading
Before read

./recv
Before read

Это означает то, что функция write отработала программа пошла дальше читать, а на другом конце read не получила ничего. - Но прикол в следующем если убрать код чтения из send. - Он будет отмечен внизу, read
получит свой Hello server.
$./recv
Before read
[13]<-----
[Hello client
] --- [13]
End reading
lets writing
Sending Hello server
End writing

$ ./send
Sending Hello server
End writing
lets reading

- И еще один момент - read отрабатывает после sleep на send. Это блин почему так может получиться? Складыавется такое чувство что данные передаются когда соединение завершается. - Странно не правда ли?


Код на одном конце:(recv.c)
    //Read begin
    for(;;)
    {
    printf("Before read\n");
    len = BIO_read(sbio, tmpbuf, sizeof(tmpbuf));
    printf("[%d]<-----\n",len);
    if(len == 0)
    {
      printf("Server is close connection\n");
      return 0;
    }
    else if(len < 0)
    {
      if(! BIO_should_retry(sbio))
       {
       printf("Read is crashed %d\n",len);
       return 0;
       }
       continue;
    }
    tmpbuf[len]=0;
    break;
    }    
    printf("[%s] --- [%d] \n",tmpbuf, strlen(tmpbuf));
    //Read end
    printf("End reading\n");
    BIO_flush(sbio);
    sleep(5);
    printf("lets writing\n");
    
    //Write begin
    printf("Sending Hello server\n");
    strcpy(tmpbuf, "Hello client\n");
    for(;;)
    {
    if(BIO_write(sbio, tmpbuf, strlen(tmpbuf)) <= 0)
    {
      if(! BIO_should_retry(sbio))
      {
       printf("Write is crashed\n");
       return 0;
      }
      continue;
      }
    break;
       }
    // Write end
    printf("End writing\n");
___________________________А вот на другом__________________________________________(send.c)

    //Write begin
    printf("Sending Hello server\n");
    strcpy(tmpbuf, "Hello client\n");
    for(;;)
    {
    if(BIO_write(sbio, tmpbuf, strlen(tmpbuf)) <= 0)
    {
      if(! BIO_should_retry(sbio))
      {
       printf("Write is crashed\n");
       return 0;
      }
      continue;
      }
    break;
    }
    // Write end
    printf("End writing\n");
    sleep(5);
    printf("lets reading\n");
    
    //Read begin <-----------------------
    for(;;)
    {
    printf("Before read\n");
    len = BIO_read(sbio, tmpbuf, sizeof(tmpbuf));
    printf("[%d]<-----\n",len);
    if(len == 0)
    {
      printf("Server is close connection\n");
      return 0;
    }
    else if(len < 0)
    {
      if(! BIO_should_retry(sbio))
       {
       printf("Read is crashed %d\n",len);
       return 0;
       }
       continue;
    }
    tmpbuf[len]=0;
    break;
    }    
    printf("[%s] --- [%d] \n",tmpbuf, strlen(tmpbuf));
    //Read end
    printf("End reading\n");
    BIO_flush(sbio);<--------------------------------------
    

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру