Skip to content

Commit 00d2b94

Browse files
committed
Improved socket creation.
1 parent c62e3bb commit 00d2b94

File tree

1 file changed

+34
-3
lines changed

1 file changed

+34
-3
lines changed

lib/tls/ping.rb

+34-3
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,44 @@ def execute
4141
socket&.close
4242
end
4343

44-
def tcp_socket
45-
socket = Socket.tcp(@host, @port, connect_timeout: @timeout)
46-
socket.timeout = @timeout
44+
def socket
45+
addr_info = Socket.getaddrinfo(@host, nil, nil, Socket::SOCK_STREAM)
46+
address_family = addr_info[0][4]
47+
48+
socket = Socket.new(address_family, Socket::SOCK_STREAM, 0)
49+
sockaddr = Socket.sockaddr_in(@port, addr_info[0][3])
50+
51+
begin
52+
socket.connect_nonblock(sockaddr)
53+
rescue IO::WaitWritable
54+
if socket.wait_writable(@timeout)
55+
begin
56+
socket.connect_nonblock(sockaddr)
57+
rescue Errno::EISCONN
58+
# connection established
59+
rescue StandardError => e
60+
socket.close
61+
raise e
62+
end
63+
else
64+
socket.close
65+
raise Timeout::Error, 'Execution expired'
66+
end
67+
end
4768

4869
socket
4970
end
5071

72+
def tcp_socket
73+
socket = socket()
74+
75+
tcp_socket = TCPSocket.for_fd(socket.fileno)
76+
tcp_socket.autoclose = true
77+
tcp_socket.timeout = @timeout
78+
79+
tcp_socket
80+
end
81+
5182
def tls_socket(socket)
5283
tls_socket = OpenSSL::SSL::SSLSocket.new(socket, tls_ctx)
5384
tls_socket.hostname = @host

0 commit comments

Comments
 (0)