(1) SF patch# 1755214 by Amaury Forgeot d'Arc which makes some tests

pass on Windows.

(2) Fix a typo in makefile() where using a text mode would attempt to set
    self.mode instead of text.mode.
This commit is contained in:
Guido van Rossum 2007-07-17 20:41:19 +00:00
parent dc40ae6b24
commit 93adc5dfaf
1 changed files with 9 additions and 6 deletions

View File

@ -87,8 +87,11 @@ if sys.platform.lower().startswith("win"):
__all__.append("errorTab") __all__.append("errorTab")
_os_has_dup = hasattr(os, "dup") # True if os.dup() can duplicate socket descriptors.
if _os_has_dup: # (On Windows at least, os.dup only works on files)
_can_dup_socket = hasattr(_socket, "dup")
if _can_dup_socket:
def fromfd(fd, family=AF_INET, type=SOCK_STREAM, proto=0): def fromfd(fd, family=AF_INET, type=SOCK_STREAM, proto=0):
nfd = os.dup(fd) nfd = os.dup(fd)
return socket(family, type, proto, fileno=nfd) return socket(family, type, proto, fileno=nfd)
@ -99,7 +102,7 @@ class socket(_socket.socket):
"""A subclass of _socket.socket adding the makefile() method.""" """A subclass of _socket.socket adding the makefile() method."""
__slots__ = ["__weakref__"] __slots__ = ["__weakref__"]
if not _os_has_dup: if not _can_dup_socket:
__slots__.append("_base") __slots__.append("_base")
def __repr__(self): def __repr__(self):
@ -116,7 +119,7 @@ class socket(_socket.socket):
conn, addr = _socket.socket.accept(self) conn, addr = _socket.socket.accept(self)
fd = conn.fileno() fd = conn.fileno()
nfd = fd nfd = fd
if _os_has_dup: if _can_dup_socket:
nfd = os.dup(fd) nfd = os.dup(fd)
wrapper = socket(self.family, self.type, self.proto, fileno=nfd) wrapper = socket(self.family, self.type, self.proto, fileno=nfd)
if fd == nfd: if fd == nfd:
@ -125,7 +128,7 @@ class socket(_socket.socket):
conn.close() conn.close()
return wrapper, addr return wrapper, addr
if not _os_has_dup: if not _can_dup_socket:
def close(self): def close(self):
"""Wrap close() to close the _base as well.""" """Wrap close() to close the _base as well."""
_socket.socket.close(self) _socket.socket.close(self)
@ -177,7 +180,7 @@ class socket(_socket.socket):
return buffer return buffer
text = io.TextIOWrapper(buffer, encoding, newline) text = io.TextIOWrapper(buffer, encoding, newline)
text.name = self.fileno() text.name = self.fileno()
self.mode = mode text.mode = mode
return text return text