Hi,
I tried with some different logic in the else part to get the dump of the
error returned by Bio_do_connect() API, but no luck. File is getting created
but nothing is getting written over there.
else
{
FILE * pFile1;
char mystring [500];
pFile1 = fopen ("result.txt","a");
if (pFile1!=NULL)
{
ERR_print_errors_fp(stderr);
if ( fgets (mystring , 500 , stderr) != NULL )
{
fputs (mystring, pFile);
}
fclose(pFile1);
}
cout << " The Bio_do_connect failed" << endl;
break;
}
And also tried this one, but no luck.
else
{
FILE * pFile1;
char mystring [500];
pFile1 = fopen ("result.txt","a");
if (pFile1!=NULL)
{
ERR_print_errors_fp(stderr);
fgets (mystring , 500 , stderr);
fputs (mystring, pFile);
fclose(pFile1);
}
cout << " The Bio_do_connect failed" << endl;
break;
}
Could you please have a look and help me here. I am not able to proceed
further.
Thanks
Akanksha Shukla.
From: [email protected]
[mailto:[email protected]] On Behalf Of Akanksha Shukla
Sent: Saturday, October 29, 2011 11:47 PM
To: [email protected]
Subject: RE: Open SSL API's Support For IPv6.
Hi Michael,
Sorry for the confusion caused but the whole code sequence is like this:
int retryCounter = 0;
while(retryCounter < CONNECT_MAX_TRY)
{
int retVal = BIO_do_connect(conn);
if(retVal <= 0)
{
if(BIO_should_retry(conn))
{
retryCounter++;
sleep(CONNECT_SLEEP_INTERVAL);
FILE * pFile;
pFile = fopen ("result_retry.txt","a");
if (pFile!=NULL)
{
ERR_print_errors_fp(pFile);
fclose(pFile);
}
continue;
}
else
{
FILE * pFile1;
pFile1 = fopen ("result.txt","a");
if (pFile1!=NULL)
{
ERR_print_errors_fp(pFile1);
fclose(pFile1);
}
cout << " The Bio_do_connect failed" << endl;
break;
}
}
else
{
cout << " The Bio_do_connect passes" << endl;
break;
}
}
The retry counter is meant for Bio_should_retry() API and it should try for
10 times as the value of CONNECT_MAX_TRY is set to 10. But in this case, the
Bio_should_retry() API is passed, hence value of retry counter is not
incremented and control goes to the else part where I am trying to print the
error in file. The break statement is else part will cause the control to
move out of the while loop and hence the Bio_do_connect failed gets printed
for one time only.
But problem is that in the file "result.txt", nothing is getting dumped as I
explained you in the earlier mails also. But when I use fputs, I can see
output in the file. So, please suggest here what mistake I am making in
writing the error to the file.
Any help would be really appreciable here as I am getting struck in IPv4
only case, while I wanted to have such logic which could have serve my
purpose for both IPv4 as well as IPV6.
Thanks
Akanksha Shukla.
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Michael S. Zick
Sent: Wednesday, October 26, 2011 2:26 AM
To: [email protected]
Subject: Re: Open SSL API's Support For IPv6.
On Tue October 25 2011, Akanksha Shukla wrote:
> Hi Stephen,
>
>
>
> I added debug code as:
>
>
>
> int retryCounter = 0;
>
> while(retryCounter < CONNECT_MAX_TRY)
>
> {
>
> int retVal = BIO_do_connect(conn);
>
> if(retVal <= 0)
>
> {
>
> if(BIO_should_retry(conn))
>
> {
>
> retryCounter++;
>
> sleep(CONNECT_SLEEP_INTERVAL);
>
> FILE * pFile;
>
> pFile = fopen ("result_retry.txt","a");
>
> if (pFile!=NULL)
>
> {
>
> ERR_print_errors_fp(pFile);
>
> }
>
> continue;
>
> }
>
> else
>
> {
>
>
>
> FILE * pFile1;
>
> pFile1 = fopen ("result.txt","a");
>
> if (pFile1!=NULL)
>
> {
>
> ERR_print_errors_fp(pFile1);
>
> }
>
> cout << " The Bio_do_connect failed" << endl;
>
>
>
> }
>
> }
>
> }
>
>
>
> After execution of program, I saw that only "result.txt" file is getting
> created and not the "result_retry.txt" file which clarifies that the retry
> logic is working fine. Problem comes when retry counter reaches its max
> value and Bio_do_connect() gets failed. Though my understanding might be
> wrong here.
>
>
>
> But the main problem which I encountered today is that nothing is being
> written in the file "result.txt" and I am also hoping that I am using the
> ERR_print_errors_fp() function in correct way. The file is blank. Then
just
> to make sure that pFile1 handle returned as Not NULL and we are entering
> inside the if check, I added statement
>
> If(pfile1! = NULL)
>
> {
>
> fputs ("fopen example",pFile);
>
> //ERR_print_errors_fp(pFile1);
>
> }
>
>
>
> And this time, I could see that "fopen example" is being written to
> result.txt file successfully.
>
>
>
> So, could you please suggest what mistake I am doing here that SSL errors
> are not being getting written in file and also any other suggestions to
try
> out.
>
Q? How many times do you intend to open that file inside of the
while loop without ever flushing or closing it?
Mike
>
>
> Thanks
>
> Akanksha Shukla.
>
>
>
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of Dr. Stephen Henson
> Sent: Tuesday, October 25, 2011 4:34 AM
> To: [email protected]
> Subject: Re: Open SSL API's Support For IPv6.
>
>
>
> On Sun, Oct 23, 2011, Akanksha Shukla wrote:
>
>
>
> > Hi Stephen,
>
> >
>
> >
>
> >
>
> > I tried with retry logic as well (though earlier it was also same), but
> same
>
> > result.
>
> >
>
> >
>
> >
>
> > int retryCounter = 0;
>
> >
>
> > while(retryCounter < CONNECT_MAX_TRY)
>
> >
>
> > {
>
> >
>
> > int retVal = BIO_do_connect(conn);
>
> >
>
> > if(retVal <= 0)
>
> >
>
> > {
>
> >
>
> > if(BIO_should_retry(conn))
>
> >
>
> > {
>
> >
>
> > retryCounter++;
>
> >
>
> > sleep(CONNECT_SLEEP_INTERVAL);
>
> >
>
> > continue;
>
> >
>
> > }
>
> >
>
> > else
>
> >
>
> > {
>
> >
>
> > cout << " The Bio_do_connect failed" << endl;
>
> >
>
> >
>
> >
>
> > }
>
> >
>
> > }
>
> >
>
> > }
>
> >
>
> >
>
> >
>
> > Just wanted to let you know that this piece of code is same at time when
I
>
> > used BIO_new_connect() followed by BIO_set_nbio() and Bio_do_connect()
> with
>
> > similar code mentioned above, then things were working fine. This time
>
> > rather than using Bio_new_connect(), I used socket(), connect() and
>
> > Bio_new_socket() API call followed by bio_set_nbio() and
Bio_do_connect()
>
> > (as suggested by you), then things started failing.
>
> >
>
> >
>
> >
>
> > Please let me know if you have any suggestions or help me in pointing
out
>
> > the issue.
>
> >
>
> >
>
>
>
> Try adding some more debugging code to see if it actually does retry and
> also
>
> if it fails call the OpenSSL ERR library to print out any useful message.
> For
>
> example ERR_print_errors_fp(stderr);
>
>
>
> Steve.
>
> --
>
> Dr Stephen N. Henson. OpenSSL project core developer.
>
> Commercial tech support now available see: http://www.openssl.org
>
> ______________________________________________________________________
>
> OpenSSL Project http://www.openssl.org
>
> User Support Mailing List [email protected]
>
> Automated List Manager [email protected]
>
>
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List [email protected]
Automated List Manager [email protected]