Patch from Ton Voon to fix bug in HTTP engine where the connection was not closed...
Andy Grundman [Fri, 4 Apr 2008 16:08:19 +0000 (16:08 +0000)]
Changes
lib/Catalyst/Engine/HTTP.pm

diff --git a/Changes b/Changes
index 4154227..23d74eb 100644 (file)
--- a/Changes
+++ b/Changes
@@ -3,6 +3,8 @@
 5.7013
         - Added test and updated docs for handling the Authorization header
           under mod_fastcgi/mod_cgi.
+        - Fixed bug in HTTP engine where the connection was not closed properly if the client disconnected
+          before sending any headers. (Ton Voon)
 
 5.7012  2007-12-16 23:44:00
         - Fix uri_for()'s and uri_with()'s handling of multibyte chars
index fcb36b4..85ab25f 100644 (file)
@@ -263,14 +263,15 @@ sub run {
             
             if ( !$self->_read_headers ) {
                 # Error reading, give up
+                close Remote;
                 next LISTEN;
             }
 
             my ( $method, $uri, $protocol ) = $self->_parse_request_line;
+            
+            next unless $method;
         
             DEBUG && warn "Parsed request: $method $uri $protocol\n";
-        
-            next unless $method;
 
             unless ( uc($method) eq 'RESTART' ) {
 
@@ -419,9 +420,14 @@ sub _read_headers {
     
     while (1) {
         my $read = sysread Remote, my $buf, CHUNKSIZE;
-    
-        if ( !$read ) {
-            DEBUG && warn "EOF or error: $!\n";
+        
+        if ( !defined $read ) {
+            next if $! == EWOULDBLOCK;
+            DEBUG && warn "Error reading headers: $!\n";
+            return;
+        }
+        elsif ( $read == 0 ) {
+            DEBUG && warn "EOF\n";
             return;
         }