diff --git a/lib/socket.rb b/lib/socket.rb index 87e8f7a72d..4e7a265f80 100644 --- a/lib/socket.rb +++ b/lib/socket.rb @@ -632,11 +632,12 @@ def tcp_setup(remote_host, remote_service, local_host = nil, end break if status >= 0 + end + if status < 0 + Errno.handle syscall Socket::Foreign.close descriptor end - - Errno.handle if status < 0 if server then err = Socket::Foreign.listen descriptor, 5 diff --git a/spec/ruby/1.8/library/socket/tcpsocket/new_spec.rb b/spec/ruby/1.8/library/socket/tcpsocket/new_spec.rb index 917fb81a7b..97cf948056 100644 --- a/spec/ruby/1.8/library/socket/tcpsocket/new_spec.rb +++ b/spec/ruby/1.8/library/socket/tcpsocket/new_spec.rb @@ -32,8 +32,10 @@ sock.addr[0].should == "AF_INET" sock.addr[1].should be_kind_of Fixnum # on some platforms (Mac), MRI - # returns comma at the end. - sock.addr[2].should =~ /^localhost,?$/ + # returns comma at the end. Other + # platforms such as OpenBSD setup the + # localhost as localhost.domain.com + sock.addr[2].should =~ /^localhost/ sock.addr[3].should == "127.0.0.1" thread.join end