(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:
parent
dc40ae6b24
commit
93adc5dfaf
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue