Issue #9356 has been updated by Shugo Maeda. Eric Wong wrote: > shugo / ruby-lang.org wrote: > > Eric Wong wrote: > > > We should guard against sockerr setting errno to > > > EINTR, ERESTART, EINPROGRESS, EALREADY, EISCONN here... > > > > Agreed. You mean to expose only usual errors to users and to hide unusual > > platform-dependent errors, right? > > Yes, because we already handle most of those with rb_wait_for_single_fd. Definitely. > http://bogomips.org/ruby.git/patch?id=d8241102f54 > git://80x24.org/ruby socket-connect-check-v4 The code looks fine, but please remove the following comment in wait_connectable(). * So it's enough to wait only RB_WAITFD_OUT and check the pending error * by getsockopt(). Or there might be no need to wait RB_WAITFD_IN. I'm not sure. ---------------------------------------- Bug #9356: TCPSocket.new does not seem to handle INTR https://bugs.ruby-lang.org/issues/9356#change-45380 * Author: Charlie Somerville * Status: Open * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: - * Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- TCPSocket.new does not seem to handle EINTR properly. In the attached test script, I try to open a TCP connection to my server and make an HTTP request while a background thread continually sends a signal to the process. This causes the #write call to fail with: x.rb:13:in `write': Socket is not connected (Errno::ENOTCONN) from x.rb:13:in `<main>' This also appears to affect 2.0.0. 1.9.3 is unaffected. ---Files-------------------------------- socket-eintr.rb (207 Bytes) wait_connectable_infinite_loop_minimal_fix.diff (478 Bytes) -- http://bugs.ruby-lang.org/