internal void ReturnError(Socket socket, int status, string message, bool withHeaders)
{
if (!socket.Connected)
{
offsetInOutput = 0;
return;
}
var http = HttpResponse[status - 100];
var offset = offsetInOutput;
Buffer.BlockCopy(http, 0, OutputTemp, offset, http.Length);
offset += http.Length;
offsetInOutput = 0;
Buffer.BlockCopy(ConnectionClose, 0, OutputTemp, offset, ConnectionClose.Length);
offset += ConnectionClose.Length;
offset = AddServerAndDate(offset);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, false);
if (message == null)
{
Buffer.BlockCopy(ZeroContentLength, 0, OutputTemp, offset, ZeroContentLength.Length);
socket.Send(OutputTemp, offset + ZeroContentLength.Length, SocketFlags.None);
socket.Close();
return;
}
if (withHeaders)
{
for (int x = 0; x < ResponseHeadersLength; x++)
{
var kv = ResponseHeaders[x];
offset += ASCII.GetBytes(kv.Key, 0, kv.Key.Length, OutputTemp, offset);
OutputTemp[offset++] = 58;
OutputTemp[offset++] = 32;
offset += ASCII.GetBytes(kv.Value, 0, kv.Value.Length, OutputTemp, offset);
OutputTemp[offset++] = 13;
OutputTemp[offset++] = 10;
}
}
Buffer.BlockCopy(PlainTextContentType, 0, OutputTemp, offset, PlainTextContentType.Length);
offset += PlainTextContentType.Length;
var len = UTF8.GetByteCount(message);
offset = AddContentLength(len, offset);
offset += UTF8.GetBytes(message, 0, message.Length, OutputTemp, offset);
socket.Send(OutputTemp, offset, SocketFlags.None);
socket.Close();
return;
}