RUBY-441
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:
parent
b23be322c0
commit
65a1ecc42d
@ -1,4 +1,5 @@
|
|||||||
require 'socket'
|
require 'socket'
|
||||||
|
require 'timeout'
|
||||||
|
|
||||||
module Mongo
|
module Mongo
|
||||||
# Wrapper class for Socket
|
# Wrapper class for Socket
|
||||||
@ -25,34 +26,12 @@ module Mongo
|
|||||||
end
|
end
|
||||||
|
|
||||||
def connect
|
def connect
|
||||||
# Connect nonblock is broken in current versions of JRuby
|
if @connect_timeout
|
||||||
if RUBY_PLATFORM == 'java'
|
Timeout::timeout(@connect_timeout, OperationTimeout) do
|
||||||
require 'timeout'
|
|
||||||
if @connect_timeout
|
|
||||||
Timeout::timeout(@connect_timeout, OperationTimeout) do
|
|
||||||
@socket.connect(@socket_address)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
@socket.connect(@socket_address)
|
@socket.connect(@socket_address)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
# Try to connect for @connect_timeout seconds
|
@socket.connect(@socket_address)
|
||||||
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
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user