flush socket to client and set block to 1400 bytes so we don't fragment
authorDobrica Pavlinusic <dpavlin@rot13.org>
Fri, 31 Jul 2009 20:45:09 +0000 (20:45 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Fri, 31 Jul 2009 20:45:09 +0000 (20:45 +0000)
TCP packets because pxelinux hangs sometimes, cleanup output

lib/PXElator/httpd.pm

index 03fe127..4c56d91 100644 (file)
@@ -61,15 +61,18 @@ sub static {
 
        my $size = -s $full || return;
 
+       $client->autoflush(1);
+
        print $client "HTTP/1.0 200 OK\r\nContent-Type: $type\r\nContent-Length: $size\r\nConnection: close\r\n\r\n";
 
        open(my $fh, $full);
-       print "static $path $type $size\n";
 
-       my $block = 8192;
+       my $block = 1400; # try not to fragment packages (pxelinux seems to have problems with it)
        my $buff;
        my $pos = 0;
 
+       print "static $path $type $size block: $block\n";
+
        while( my $len = read $fh, $buff, $block ) {
                print $client $buff;
                $pos += $len;
@@ -78,7 +81,7 @@ sub static {
        close($fh);
        close($client);
 
-       print "$path $pos == $size OK\n";
+       print "\n";
 
        exit;
 }
@@ -94,7 +97,7 @@ sub start_stop {
        my $daemon = shift;
        my $pid = $pids->{$daemon};
 
-       warn "start_stop $daemon $pid pids: ",dump( $pids );
+       warn "start_stop $daemon $pid\n";
 
        if ( $pid =~ m{^\d+$} ) {
                my $pstree = `pstree -p $pid`;
@@ -107,7 +110,7 @@ sub start_stop {
                if ( $pid = fork ) {
                        # parent
                        $pids->{$daemon} = $pid;
-                       warn "forked $daemon $pid";
+                       warn "forked $daemon $pid\n";
                        return qq|$daemon pid $pid started|;
                } elsif ( defined $pid ) {
                        # child
@@ -130,7 +133,7 @@ my $redirect = qq|HTTP/1.1 302 Found\r\nContent-type: text/html\r\nLocation: $ur
 sub get_request {
        my ( $client, $path, $param ) = @_;
 
-       warn "get_request $client $path ",dump( $param );
+       warn "get_request $path ", $param ? dump( $param ) : '', "\n";
 
        if ( my $found = static( $client,$path ) ) {
                warn "static $found" if $debug;
@@ -147,7 +150,7 @@ sub get_request {
                        'debug',        qq|<a href=/our/debug/| . boolean::toggle($debug) . qq|>$debug</a>|,
                );
 
-               my $debug_proc;
+               my $debug_proc = '';
 
                warn 'pids: ', dump( $pids ) if $debug;
                foreach my $name ( sort keys %$pids ) {
@@ -268,7 +271,6 @@ sub start {
                                }
                                warn "param: ",dump( $param ) if $debug;
                        }
-                       warn "path $path param: ",dump( $param );
                        get_request $client, $path, $param;
                } else {
                        print $client "HTTP/1.0 500 No method\r\nConnection: close\r\nContent-type: text/plain\r\n\r\n500 $request";