Hi Graham,
Thank you a lot for your response! -
Just to merge this properly with your previous response to another
thread this past Sat the 21:st in
https://mta.openssl.org/pipermail/openssl-users/2015-February/000608.html
,
It's not just “I want to read during SSL_write, are you ok with me doing
this?” but rather "I want to read during SSL_write [nevermind if I tried
already or not]. Please invoke me next time when there's actual input
data available, thank you." -
SSL_ERROR_WANTS_READ/WRITE is how OpenSSL says that it needs more data
on the socket ie asks user to select() with the socket in readfds and
reinvoke when there is more data, or it wants to write for the socket
and it's not writable anymore now, so it asks the user to select() with
the socket in writefds and reinvoke when it's writable, right?
I.e. the if_ready_to_read/if_ready_to_write you suggested below would
generally be implemented in terms of a select() call.
And then of course, as a caller I'm not obliged to do a select() and
reiterate but I may do anything, or do another SSL operation such as
another SSL_read or SSL_shutdown (though supposedly also that one would
return with the same SSL_ERROR_WANTS_READ/WRITE so that would just be to
postpone the problem) right?
..And also I suppose this means you confirm that all the points in my
previous email were correct.
Thanks :)
On 2015-02-24 20:48, Graham Leggett wrote:
On 22 Feb 2015, at 11:22 PM, Tinker <ti...@openmailbox.org> wrote:
I need your authoritative answer on the following question.
[snip stuff that is too long]
You are totally overthinking this.
The SSL protocol involves negotiation, during which the sender and the
receiver exchange data with each other. What this means is that during
either SSL_read, or SSL_write, openssl might try to write or read
respectively. If your non-blocking code isn’t geared to handle this,
you might end up either hanging or spinning as you wait for the wrong
event.
The SSL_WANTS_READ response code is a warning that means “I want to
read during SSL_write, are you ok with me doing this?”.
The SSL_WANTS_WRITE response code is a warning that means “I want to
write during SSL_read, are you ok with me doing this?”.
In both cases, once you have determined that it is ok to read, or ok
to write, you simply retry SSL_write() or SSL_read() again.
For example, a read loop:
sense = READ;
while (sense == READ ? if_ready_to_read() : if_ready_to_write()) {
rc = SSL_read();
if (rc == SSL_WANT_WRITE) {
sense = WRITE;
} else {
sense = READ;
}
// do stuff with what you read (you may have read nothing, but
that’s fine too)
}
Regards,
Graham
—
_______________________________________________
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users
_______________________________________________
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users