Re: [PATCH] Check for Socket::TCP_INFO constant before trying to get TCP_INFO

2017-03-25 Thread Eric Wong
Dylan Thacker-Smith  wrote:
> On Sat, Mar 25, 2017 at 10:41 PM, Eric Wong  wrote:
> > 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.
> 
> No it isn't needed, so you can remove it.
> 
> I had just started my patch before seeing his, so reverted his as part
> of rebasing and this line was present before his patch.

Thanks, pushed as 477a2207869ff6b11a1cdee428b55604f2caa69e
to "master" of git://bogomips.org/unicorn
--
unsubscribe: unicorn-public+unsubscr...@bogomips.org
archive: https://bogomips.org/unicorn-public/



Re: [PATCH] Check for Socket::TCP_INFO constant before trying to get TCP_INFO

2017-03-25 Thread Dylan Thacker-Smith
On Sat, Mar 25, 2017 at 10:41 PM, Eric Wong  wrote:
> 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.

No it isn't needed, so you can remove it.

I had just started my patch before seeing his, so reverted his as part
of rebasing and this line was present before his patch.



Re: [PATCH] Check for Socket::TCP_INFO constant before trying to get TCP_INFO

2017-03-25 Thread Eric Wong
Dylan Thacker-Smith  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: unicorn-public+unsubscr...@bogomips.org
archive: https://bogomips.org/unicorn-public/