Прошу прощения я не правильно вставил код.
Вобщем почитал я тут поэксперементировал немного - некоторые вещи прояснились переделал код - в общем я в обе стороны могу передавать, но возникла следующая трудность:
Код подкючения и тд и тп я писать не буду - он рабочий осталость только понять как работают 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);<--------------------------------------