File size: 1,373 Bytes
89419ea | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | import socket
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
def _fallback_socketpair_no_peer_check(family=socket.AF_INET, type=socket.SOCK_STREAM, proto=0):
if family == socket.AF_INET:
host = "127.0.0.1"
elif family == socket.AF_INET6:
host = "::1"
else:
raise ValueError("Only AF_INET and AF_INET6 socket address families are supported")
if type != socket.SOCK_STREAM:
raise ValueError("Only SOCK_STREAM socket type is supported")
if proto != 0:
raise ValueError("Only protocol zero is supported")
listener = socket.socket(family, type, proto)
try:
listener.bind((host, 0))
listener.listen(1)
address = listener.getsockname()[:2]
client = socket.socket(family, type, proto)
try:
client.setblocking(False)
try:
client.connect(address)
except (BlockingIOError, InterruptedError):
pass
client.setblocking(True)
server, _ = listener.accept()
except Exception:
client.close()
raise
finally:
listener.close()
return server, client
if sys.platform.startswith("win"):
socket.socketpair = _fallback_socketpair_no_peer_check
|