internal void Close (bool force_close)
{
if (sock != null) {
Stream st = GetResponseStream ();
st.Close ();
o_stream = null;
}
if (sock != null) {
force_close |= (context.Request.Headers ["connection"] == "close");
if (!force_close) {
int status_code = context.Response.StatusCode;
bool conn_close = (status_code == 400 || status_code == 408 || status_code == 411 ||
status_code == 413 || status_code == 414 || status_code == 500 ||
status_code == 503);
force_close |= (context.Request.ProtocolVersion <= HttpVersion.Version10);
}
if (!force_close && context.Request.FlushInput ()) {
if (chunked && context.Response.ForceCloseChunked == false) {
// Don't close. Keep working.
chunked_uses++;
Unbind ();
Init ();
BeginReadRequest ();
return;
}
Unbind ();
Init ();
BeginReadRequest ();
return;
}
Socket s = sock;
sock = null;
try {
if (s != null)
s.Shutdown (SocketShutdown.Both);
} catch {
} finally {
if (s != null)
s.Close ();
}
Unbind ();
return;
}
}
}