Actions
Feature #13379
closed[PATCH] safe IMAP connections
Description
Hi,
I found out that using the standard IMAP library isn't very safe. It can be forced to hang the whole application.
the problem is here
s = @sock.gets(CRLF)
-> the server accepted the connection but it didn't send any data. Now I need to reboot the server because my thread is blocked forever.
I have no other option but to use this
Timeout.timeout(timeout, Net::OpenTimeout) { Net::IMAP.new(host, port, ssl) }
which basically works, but I really don't want to create a new thread for each IMAP call, so I did these changes:
1/ replaced TCPSocket with Socket.tcp
2/ replaced sock.read and sock.gets with sock.read_nonblock
now it works as expected.
Patch
https://github.com/ruby/ruby/pull/1557
related issue, please consider merging this one as well
#12928
Files
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0