Я хочу смоделировать тестовые сбои / тайм-ауты кроссплатформенного соединения, начиная с блокировки connect()
s:
#!/usr/bin/python3
import socket
s = socket.socket()
endpoint = ('localhost', 28813)
s.bind((endpoint))
# listen for connections, accept 0 connections kept waiting (backlog)
# all other connect()s should block indefinitely
s.listen(0)
for i in range(1,1000):
c = socket.socket()
c.connect(endpoint)
# print number of successfully connected sockets
print(i)
В Linux он печатает «1» и зависает бесконечно (то есть, поведение, которое я хочу).
В Windows (Server 2012) он печатает «1» и прерывает работу с ConnectionRefusedError
.
В macOS он печатает все числа от 1 до 128, а затем зависает на неопределенное время.
Таким образом, я мог бы согласиться с тем, что macOS игнорирует параметр backlog и просто подключить достаточно сокетов, чтобы клиенты могли блокировать новые подключения.
Как заставить Windows также блокировать connect()
попытки?