How can an I use nonblocking I/O with openssl?


#1

hello,
I am using ruby’s imap library to connect to gmail via ssl.
But every now and then, my thread goes into sleep and never wakes up.
I suspect that the thread is waiting for I/O for reading.

how can I make openssl use nonblocking i/o?

here’s another thread discussed about similar issue:
http://www.ruby-forum.com/topic/70716

Thanks.
Yaxm


#2

On Fri, Feb 6, 2009 at 11:45 AM, Yaxm Y.
<removed_email_address@domain.invalidremoved_email_address@domain.invalid

wrote:

hello,
I am using ruby’s imap library to connect to gmail via ssl.
But every now and then, my thread goes into sleep and never wakes up.
I suspect that the thread is waiting for I/O for reading.

how can I make openssl use nonblocking i/o?

In my event library Rev (http://rev.rubyforge.org) I ended up
effectively
monkeypatching the C code in the Ruby OpenSSL extension in order to
support
non-blocking I/O:

http://github.com/tarcieri/rev/blob/5f76c67996fd9076503072cf569ad935423e9d56/ext/rev/rev_ssl.c

I for one would certainly appreciate a “real” solution to doing
non-blocking
SSL.


#3

On Fri, Feb 6, 2009 at 11:50 AM, Tony A. removed_email_address@domain.invalid wrote:

I for one would certainly appreciate a “real” solution to doing
non-blocking SSL.

If there’s interest I can release Rev’s nonblocking SSL support as a
self-contained Gem which monkeypatches connect_nonblock,
accept_nonblock,
read_nonblock, and write_nonblock methods into OpenSSL::SSL::Socket.


#4

I am very interested in as I need IMAP ssl to use non-blocking i/o.

Tony A. wrote:

On Fri, Feb 6, 2009 at 11:50 AM, Tony A. removed_email_address@domain.invalid wrote:

I for one would certainly appreciate a “real” solution to doing
non-blocking SSL.

If there’s interest I can release Rev’s nonblocking SSL support as a
self-contained Gem which monkeypatches connect_nonblock,
accept_nonblock,
read_nonblock, and write_nonblock methods into OpenSSL::SSL::Socket.


#5

On Fri, Feb 6, 2009 at 10:00 PM, Yaxm Y.
<removed_email_address@domain.invalidremoved_email_address@domain.invalid

wrote:

I am very interested in as I need IMAP ssl to use non-blocking i/o.

All right, well I released non-blocking OpenSSL support as a gem.

github repo here:
http://github.com/tarcieri/openssl-nonblock/tree/master

release announcement here:
http://www.nabble.com/-ANN--openssl-nonblock-0.1.0-to21885626.html

And now installable as “gem install openssl-nonblock”

Let me know if it works out for you.