import socket import sys backlog = 1 clis = [] client = None def do(): # create a connection to the server which is actually accepted global client client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) HOST = sys.argv[1] port = 4711 print("connect", HOST, port) #client.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) client.connect((HOST, port)) # create as many connections as are kept by the backlog clis = [] for i in range(backlog): print("cli", i) cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #cli.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) cli.connect((HOST, port)) clis.append(cli) print("connections:", backlog, len(clis)) print("creating cli2...") # create one more connection: this must fail cli2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #cli2.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) cli2.settimeout(3) try: cli2.connect((HOST, port)) assert False, "DAMMIT!" except socket.error: print("IT WORKS!!!!") print("sending server data (to exit)") client.send(b'x') client.close() print("client done") try: do() finally: print("closing pending connections") for cli in clis: cli.close() client.close()