Issue #4555 has been updated by Motohiro KOSAKI.


Hi

I'm not convinced why we can safely call select() when we get EINTR. IOW,
Why don't you choose following patch?


Index: ext/socket/init.c
===================================================================
--- ext/socket/init.c   (revision 31258)
+++ ext/socket/init.c   (working copy)
@@ -383,6 +383,12 @@
        status = (int)BLOCKING_REGION_FD(func, &arg);
        if (status < 0) {
            switch (errno) {
+             case EINTR:
+#if defined(ERESTART)
+             case ERESTART:
+#endif
+               continue;
+
              case EAGAIN:
 #ifdef EINPROGRESS
              case EINPROGRESS:

----------------------------------------
Bug #4555: [PATCH] ext/socket/init.c: rsock_connect retries on interrupt
http://redmine.ruby-lang.org/issues/4555

Author: Eric Wong
Status: Assigned
Priority: Normal
Assignee: Motohiro KOSAKI
Category: ext
Target version: 1.9.x
ruby -v: ruby 1.9.3dev (2011-04-05 trunk 31241) [x86_64-linux]


Otherwise I get the following error in test/openssl/test_ssl.rb:

  test_verify_result(OpenSSL::TestSSL):
  Errno::EINTR: Interrupted system call - connect(2)
      /tmp/ruby/test/openssl/test_ssl.rb:338:in `initialize'
      /tmp/ruby/test/openssl/test_ssl.rb:338:in `new'
      /tmp/ruby/test/openssl/test_ssl.rb:338:in `block in test_verify_result'
      /tmp/ruby/test/openssl/test_ssl.rb:117:in `call'
      /tmp/ruby/test/openssl/test_ssl.rb:117:in `start_server'
      /tmp/ruby/test/openssl/test_ssl.rb:330:in `test_verify_result'

This bug is made more noticeable by r31230, though it always
existed before.

Fwiw, I think all the wait_connectable() logic incorrectly uses
the except_fds parameter of select() and rb_io_wait_writable()
should be used here...



-- 
http://redmine.ruby-lang.org