Dylan Thacker-Smith <[email protected]> wrote:
> The ruby constant Socket::TCP_INFO is only defined if TCP_INFO is defined
> in C, so we can just check for the presence of that ruby constant instead
> of rescuing SocketError from the call to getsockopt.

Good catch!  I forget there's systems without TCP_INFO at all :x

> +++ b/lib/unicorn/http_request.rb
> @@ -29,7 +29,7 @@ class Unicorn::HttpParser
>    EMPTY_ARRAY = [].freeze
>    @@input_class = Unicorn::TeeInput
>    @@check_client_connection = false
> -  @@tcpi_inspect_ok = nil
> +  @@tcpi_inspect_ok = Socket.const_defined?(:TCP_INFO)
>  
>    def self.input_class
>      @@input_class
> @@ -154,20 +154,10 @@ def closed_state?(state) # :nodoc:
>      # Not that efficient, but probably still better than doing unnecessary
>      # work after a client gives up.
>      def check_client_connection(socket) # :nodoc:
> -      if Unicorn::TCPClient === socket && @@tcpi_inspect_ok != false
> -        if @@tcpi_inspect_ok
> -          opt = socket.getsockopt(:IPPROTO_TCP, :TCP_INFO).inspect
> -        else
> -          @@tcpi_inspect_ok = true
> -          opt = begin
> -            socket.getsockopt(:IPPROTO_TCP, :TCP_INFO)
> -          rescue SocketError
> -            @@tcpi_inspect_ok = false
> -            return write_http_header(socket)
> -          end.inspect
> -        end
> -
> +      if Unicorn::TCPClient === socket && @@tcpi_inspect_ok
> +        opt = socket.getsockopt(Socket::IPPROTO_TCP, 
> Socket::TCP_INFO).inspect
>          if opt =~ /\bstate=(\S+)/
> +          @@tcpi_inspect_ok = true

Is the last line to set "@@tcpi_inspect_ok = true" still
necessary?  It was necessary in Jeremy's version, but I think
you can safely omit it, now.

>            raise Errno::EPIPE, "client closed connection".freeze,
>                  EMPTY_ARRAY if closed_state_str?($1)
>          else

Anyways, I'm inclined to apply your patch with the redundant
assignment removed (no need to resend).  Thanks.
--
unsubscribe: [email protected]
archive: https://bogomips.org/unicorn-public/

Reply via email to