From: normalperson@... Date: 2014-09-18T19:32:35+00:00 Subject: [ruby-core:65116] [ruby-trunk - Bug #9356] TCPSocket.new does not seem to handle INTR Issue #9356 has been updated by Eric Wong. usa@garbagecollect.jp wrote: > Perhaps, we should write a test that actually causes EINTR during `connect`. > > But, when I committed r7931, there was a failure of an existing test, I guess. > At the moment, such failure has not been observed. > So, I think that there is not a big portability problem in this patch. Thanks for confirming. Unfortunately, EINTR is not easy to trigger on a connect test case to localhost. Not even -Wl,--wrap in GNU ld is useful for testing this, it is dependent on socket state in the kernel. ---------------------------------------- Bug #9356: TCPSocket.new does not seem to handle INTR https://bugs.ruby-lang.org/issues/9356#change-48969 * Author: Charlie Somerville * Status: Closed * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: - * Backport: 1.9.3: UNKNOWN, 2.0.0: REQUIRED, 2.1: REQUIRED ---------------------------------------- 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 `
' 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) -- https://bugs.ruby-lang.org/