handlers, wrapping the low-level ashd.proto module.
"""
-import os, socket
-import proto
+import os, socket, collections
+from . import proto
__all__ = ["stdfork", "pchild", "respond", "serveloop"]
if pid == 0:
try:
os.dup2(csk.fileno(), 0)
- for fd in xrange(3, 1024):
+ for fd in range(3, 1024):
try:
os.close(fd)
except:
For example:
respond(req, "Not found", status = "404 Not Found", ctype = "text/plain")
"""
- if type(body) == unicode:
- body = body.decode("utf-8")
- if ctype[:5] == "text/" and ctype.find(';') < 0:
- ctype = ctype + "; charset=utf-8"
+ if isinstance(body, collections.ByteString):
+ body = bytes(body)
else:
body = str(body)
+ body = body.encode("utf-8")
+ if ctype[:5] == "text/" and ctype.find(';') < 0:
+ ctype = ctype + "; charset=utf-8"
try:
- req.sk.write("HTTP/1.1 %s\n" % status)
- req.sk.write("Content-Type: %s\n" % ctype)
- req.sk.write("Content-Length: %i\n" % len(body))
- req.sk.write("\n")
+ head = ""
+ head += "HTTP/1.1 %s\n" % status
+ head += "Content-Type: %s\n" % ctype
+ head += "Content-Length: %i\n" % len(body)
+ head += "\n"
+ req.sk.write(head.encode("ascii"))
req.sk.write(body)
finally:
req.close()