MCPcopy
hub / github.com/benoitc/gunicorn / sendfile

Method sendfile

gunicorn/http/wsgi.py:447–478  ·  view source on GitHub ↗
(self, respiter)

Source from the content-addressed store, hash-verified

445 return self.cfg.sendfile is not False
446
447 def sendfile(self, respiter):
448 if self.cfg.is_ssl or not self.can_sendfile():
449 return False
450
451 if not util.has_fileno(respiter.filelike):
452 return False
453
454 fileno = respiter.filelike.fileno()
455 try:
456 offset = os.lseek(fileno, 0, os.SEEK_CUR)
457 if self.response_length is None:
458 filesize = os.fstat(fileno).st_size
459 nbytes = filesize - offset
460 else:
461 nbytes = self.response_length
462 except (OSError, io.UnsupportedOperation):
463 return False
464
465 self.send_headers()
466
467 if self.is_chunked():
468 chunk_size = "%X\r\n" % nbytes
469 self.sock.sendall(chunk_size.encode('utf-8'))
470 if nbytes > 0:
471 self.sock.sendfile(respiter.filelike, offset=offset, count=nbytes)
472
473 if self.is_chunked():
474 self.sock.sendall(b"\r\n")
475
476 os.lseek(fileno, offset, os.SEEK_SET)
477
478 return True
479
480 def write_file(self, respiter):
481 if not self.sendfile(respiter):

Callers 1

write_fileMethod · 0.95

Calls 6

can_sendfileMethod · 0.95
send_headersMethod · 0.95
is_chunkedMethod · 0.95
encodeMethod · 0.80
filenoMethod · 0.45
sendallMethod · 0.45

Tested by

no test coverage detected