Remove connect_nonblock from tcp_socket implementation to reduce
problems due to inconsistent implementation in JRuby and Windows.

Connection timeouts are now reverted to using the timeout module for all
platforms.
This commit is contained in:
Tyler Brock 2012-05-31 16:27:33 -04:00
parent b23be322c0
commit 65a1ecc42d
1 changed files with 4 additions and 25 deletions

View File

@ -1,4 +1,5 @@
require 'socket'
require 'timeout'
module Mongo
# Wrapper class for Socket
@ -25,34 +26,12 @@ module Mongo
end
def connect
# Connect nonblock is broken in current versions of JRuby
if RUBY_PLATFORM == 'java'
require 'timeout'
if @connect_timeout
Timeout::timeout(@connect_timeout, OperationTimeout) do
@socket.connect(@socket_address)
end
else
if @connect_timeout
Timeout::timeout(@connect_timeout, OperationTimeout) do
@socket.connect(@socket_address)
end
else
# Try to connect for @connect_timeout seconds
begin
@socket.connect_nonblock(@socket_address)
rescue Errno::EINPROGRESS
# Block until there is a response or error
resp = IO.select([@socket], [@socket], [@socket], @connect_timeout)
if resp.nil?
raise ConnectionTimeoutError
end
end
# If there was a failure this will raise an Error
begin
@socket.connect_nonblock(@socket_address)
rescue Errno::EISCONN
# Successfully connected
end
@socket.connect(@socket_address)
end
end