Issue #4555 has been updated by Eric Wong.


Your patch looks reasonable to me, but maybe some platforms break under it...

I was trying to emulate rb_io_wait_writable() logic which calls
rb_thread_fd_writable() (which wraps select() if there are multiple threads).
Maybe avoiding select() in all EINTR cases will work, I am under the impression
a lot of the select()-wrapping calls in Ruby are relics of the old green threading
and can be removed.

----------------------------------------
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