Index: lib/drb/drb.rb =================================================================== --- lib/drb/drb.rb (revision 39716) +++ lib/drb/drb.rb (working copy) @@ -981,6 +981,8 @@ module DRb def set_sockopt(soc) # :nodoc: soc.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) soc.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? Fcntl::FD_CLOEXEC + rescue Errno::EINVAL + # socket was closed end end Index: test/drb/test_drbtcp.rb =================================================================== --- test/drb/test_drbtcp.rb (revision 0) +++ test/drb/test_drbtcp.rb (working copy) @@ -0,0 +1,23 @@ +require 'drb' + +class TestDRbTCP < Test::Unit::TestCase + + def test_set_sockopt + server = DRb::DRbServer.new('druby://:0') + + host, port, = DRb::DRbTCPSocket.send(:parse_uri, server.uri) + + socket = TCPSocket.open host, port + socket.shutdown + + client = DRb::DRbTCPSocket.new(server.uri, socket) + + assert client + + client.close + + server.stop_service + end + +end +