@@ -65,26 +65,37 @@ def closed?
6565 arr << Errno ::EALREADY if Platform . wsl?
6666 } . freeze
6767
68- def listening?
69- addr = Socket . getaddrinfo ( @host , @port , Socket ::AF_INET , Socket ::SOCK_STREAM )
70- sock = Socket . new ( Socket ::AF_INET , Socket ::SOCK_STREAM , 0 )
71- sockaddr = Socket . pack_sockaddr_in ( @port , addr [ 0 ] [ 3 ] )
72-
73- begin
74- sock . connect_nonblock sockaddr
75- rescue Errno ::EINPROGRESS
76- retry if socket_writable? ( sock ) && conn_completed? ( sock )
77- raise Errno ::ECONNREFUSED
78- rescue *CONNECTED_ERRORS
79- # yay!
68+ if Platform . jruby?
69+ # we use a plain TCPSocket here since JRuby has issues closing socket
70+ # see https://github.com/jruby/jruby/issues/5709
71+ def listening?
72+ TCPSocket . new ( @host , @port ) . close
73+ true
74+ rescue *NOT_CONNECTED_ERRORS
75+ false
76+ end
77+ else
78+ def listening?
79+ addr = Socket . getaddrinfo ( @host , @port , Socket ::AF_INET , Socket ::SOCK_STREAM )
80+ sock = Socket . new ( Socket ::AF_INET , Socket ::SOCK_STREAM , 0 )
81+ sockaddr = Socket . pack_sockaddr_in ( @port , addr [ 0 ] [ 3 ] )
82+
83+ begin
84+ sock . connect_nonblock sockaddr
85+ rescue Errno ::EINPROGRESS
86+ retry if socket_writable? ( sock ) && conn_completed? ( sock )
87+ raise Errno ::ECONNREFUSED
88+ rescue *CONNECTED_ERRORS
89+ # yay!
90+ end
91+
92+ sock . close
93+ true
94+ rescue *NOT_CONNECTED_ERRORS
95+ sock &.close
96+ WebDriver . logger . debug ( "polling for socket on #{ [ @host , @port ] . inspect } " )
97+ false
8098 end
81-
82- sock . close
83- true
84- rescue *NOT_CONNECTED_ERRORS
85- sock &.close
86- WebDriver . logger . debug ( "polling for socket on #{ [ @host , @port ] . inspect } " )
87- false
8899 end
89100
90101 def socket_writable? ( sock )
0 commit comments