From 9e1daac8acd3895d3ff91ec74801756f076050e9 Mon Sep 17 00:00:00 2001 From: Denis Talakevich Date: Tue, 4 Feb 2020 18:31:07 +0200 Subject: [PATCH] connect to socket in nonblock mode, bump 1.1.7 --- lib/jrpc/transport/socket_tcp.rb | 17 +++++++++++++---- lib/jrpc/version.rb | 2 +- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/jrpc/transport/socket_tcp.rb b/lib/jrpc/transport/socket_tcp.rb index 0eaf3f7..2a5891d 100644 --- a/lib/jrpc/transport/socket_tcp.rb +++ b/lib/jrpc/transport/socket_tcp.rb @@ -67,16 +67,25 @@ def set_timeout_to(socket, type, value) def build_socket host = @server.split(':').first addr = Socket.getaddrinfo(host, nil) - sock = Socket.new(Socket.const_get(addr[0][0]), Socket::SOCK_STREAM, 0) - set_timeout_to(sock, Socket::SO_RCVTIMEO, @connect_timeout) if @connect_timeout - sock + Socket.new(Socket.const_get(addr[0][0]), Socket::SOCK_STREAM, 0) end def connect_socket host, port = @server.split(':') addr = Socket.getaddrinfo(host, nil) full_addr = Socket.pack_sockaddr_in(port, addr[0][3]) - socket.connect(full_addr) + + begin + socket.connect_nonblock(full_addr) + rescue IO::WaitWritable => _ + if IO.select(nil, [socket], nil, @connect_timeout) + socket.connect_nonblock(full_addr) + else + clear_socket! + raise ConnectionFailedError, "Can't connect during #{@connect_timeout}" + end + end + rescue Errno::EISCONN => _ # already connected rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ETIMEDOUT, Errno::EPIPE => e diff --git a/lib/jrpc/version.rb b/lib/jrpc/version.rb index 73001bd..8a32a42 100644 --- a/lib/jrpc/version.rb +++ b/lib/jrpc/version.rb @@ -1,3 +1,3 @@ module JRPC - VERSION = '1.1.6' + VERSION = '1.1.7' end