From 3f7259fa7dbba7bc81e076f9e7da6ac4d65e0b22 Mon Sep 17 00:00:00 2001 From: AN Long Date: Thu, 23 Nov 2023 22:50:37 +0800 Subject: [PATCH] fix tests --- Lib/socket.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Lib/socket.py b/Lib/socket.py index 431cbb39e6d..ab37d28ddf1 100644 --- a/Lib/socket.py +++ b/Lib/socket.py @@ -468,7 +468,15 @@ def _sendfile_use_transmitfile(self, file, offset=0, count=None): offset_low = offset & 0xffff_ffff offset_high = (offset >> 32) & 0xffff_ffff count = count or 0 - ov.TransmitFile(self.fileno(), msvcrt.get_osfhandle(file.fileno()), + try: + fileno = file.fileno() + except (AttributeError, io.UnsupportedOperation) as err: + raise _GiveupOnSendfile(err) # not a regular file + try: + os.fstat(fileno) + except OSError as err: + raise _GiveupOnSendfile(err) # not a regular file + ov.TransmitFile(self.fileno(), msvcrt.get_osfhandle(fileno), offset_low, offset_high, count, 0, 0) timeout_ms = _overlapped.INFINITE if timeout is not None: @@ -514,9 +522,9 @@ def sendfile(self, file, offset=0, count=None): The socket must be of SOCK_STREAM type. Non-blocking sockets are not supported. """ - if sys.platform == "win32": - return self._sendfile_use_transmitfile(file, offset, count) try: + if sys.platform == "win32": + return self._sendfile_use_transmitfile(file, offset, count) return self._sendfile_use_sendfile(file, offset, count) except _GiveupOnSendfile: return self._sendfile_use_send(file, offset, count)