Re: NCSA implementation of KeepAlive [Mac TCP issues]

>     To get around some Mac TCP/IP peculiarities, we did work
>     out that each additional request from the client had to include
>     the "Connection: Keep-Alive" header or the server will assume
>     it is the last request and close connection after serving the
>     request.  
> That's an interesting point.  Are these peculiarities are problem
> on the server or on the client?  That is, is this necessary because
> the client is a Mac, or because the server is a Mac?

It was because the client is a Mac.  I've talked with our Mac guru,
and the problem is that there isn't a non-block close connection call
on the Mac.  If something has happened to the connection while the
Mac is trying to close the connection the Mac can hang up to 30 seconds.
So instead of doing a close, the Mac does an abort, which doesn't
close the connection.  Whenever possible the Mac client needs the
server to close the connection.  

So, we set things up so that every request must include the 
"Connection: Keep-Alive" header or the server will close the connection.
This works most of the time.  However, because the client is processing
in one thread and requesting files in another, the client doesn't always
know when it has the last URL.  In this case, a final request of either
a HEAD or GET without a URL is sent minus the Keep-Alive header, to close
the connection.  If the client doesn't send this request, the server will
wait until the idle timeout occurs, wasting resources waiting on a request
that isn't going to come.  

The down side of this scenario, is that there is wasted network traffic
when the server sends back information that the client has no interest in.
What we would like to see is a message with a header "Connection:done" or
something similar which would cause the server to immediately close the
connection without any further messages to the client.


> If the former, then the spec doesn't have to require this header
> on every request, only "peculiar" client implementations need to
> send it.  If the latter, then since the client does not know if the
> server is a Mac or no, the spec should probably require the header
> on every request.  (On the principle that the bandwidth wasted
> by sending this header is less than the bandwidth saved by not
> closing the connection.)
> -Jeff

		Elizabeth(Beth) Frank
		NCSA Server Development Team

Received on Monday, 23 October 1995 09:25:30 UTC