diff --git a/lib/puma/server.rb b/lib/puma/server.rb index d0e09a341a..75aba5bfa7 100644 --- a/lib/puma/server.rb +++ b/lib/puma/server.rb @@ -169,11 +169,11 @@ def uncork_socket(socket) UNPACK_TCP_STATE_FROM_TCP_INFO = "C".freeze def closed_socket?(socket) - return false unless socket.kind_of? TCPSocket - return false unless @precheck_closing + skt = socket.to_io + return false unless skt.kind_of?(TCPSocket) && @precheck_closing begin - tcp_info = socket.getsockopt(Socket::IPPROTO_TCP, Socket::TCP_INFO) + tcp_info = skt.getsockopt(Socket::IPPROTO_TCP, Socket::TCP_INFO) rescue IOError, SystemCallError Thread.current.purge_interrupt_queue if Thread.current.respond_to? :purge_interrupt_queue @precheck_closing = false