From: pdahorek@... Date: 2017-03-30T15:21:59+00:00 Subject: [ruby-core:80504] [Ruby trunk Feature#13379] [PATCH] safe IMAP connections Issue #13379 has been updated by ahorek (Pavel Rosick��). Yes, these APIs are very platform specific. I was just checking documentations and existing solutions. Maybe I'll use the Resolv api, but I need to check incompatibilities and also a performance impact. ---------------------------------------- Feature #13379: [PATCH] safe IMAP connections https://bugs.ruby-lang.org/issues/13379#change-64006 * Author: ahorek (Pavel Rosick��) * Status: Open * Priority: Normal * Assignee: shugo (Shugo Maeda) * Target version: ---------------------------------------- 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-------------------------------- imap.patch (3.29 KB) 0002-raise-Net-OpenTimeout.patch (1.27 KB) 0001-ssl_socket_connect-for-imap.patch (1.01 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: