'Send and log an error reply.
Arguments are the error code, and a detailed message.
The detailed message defaults to the short entry matching the
response code.
This sends an error response (so it must be called before any
output has been generated), logs the error, and finally sends
a piece of HTML explaining the error to the user.'

def send_error(self, code, message=None):

    try:
        (short, long) = self.responses[code]
    except KeyError:
        (short, long) = ('???', '???')
    if (message is None):
        message = short
    explain = long
    self.log_error('code    %d,    message    %s', code, message)
    content = (self.error_message_format % {'code': code, 'message': _quote_html(message), 'explain': explain})
    self.send_response(code, message)
    self.send_header('Content-Type', self.error_content_type)
    self.send_header('Connection', 'close')
    self.end_headers()
    if ((self.command != 'HEAD') and (code >= 200) and (code not in (204, 304))):
        self.wfile.write(content)
