Issue #9356 has been updated by Shugo Maeda. Eric Wong wrote: > Eric Wong <normalperson / yhbt.net> wrote: > > Thanks for trying. This is probably specific to *BSD sockets > > implementation, so I can't reproduce it at the moment. > > Not happening on FreeBSD 9.x kernels, at least. I could not reproduce > the problem on FreeBSD 9.2 nor Debian GNU/kFreeBSD sid (x86_64). On FreeBSD 10, Errno::ENOTCONN isn't raised, but Ruby goes in an infinite loop because getsockopt(2) in wait_connectable() sets sockerr to 0. Does anybody know why the following code in ext/socket/init.c is necessary? if (sockerr == 0) continue; /* workaround for winsock */ ---------------------------------------- Bug #9356: TCPSocket.new does not seem to handle INTR https://bugs.ruby-lang.org/issues/9356#change-45236 * Author: Charlie Somerville * Status: Open * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin13.0] * 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) -- http://bugs.ruby-lang.org/