# multiconn-client.py
import sys
import socket
import selectors
import types
sel = selectors.DefaultSelector()
messages = [b"Message 1 from client.", b"Message 2 from client."]
def start_connections(host, port, num_conns):
server_addr = (host, port)
for i in range(0, num_conns):
connid = i + 1
print(f"Starting connection {connid} to {server_addr}")
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setblocking(False)
sock.connect_ex(server_addr)
events = selectors.EVENT_READ | selectors.EVENT_WRITE
data = types.SimpleNamespace(
connid=connid,
msg_total=sum(len(m) for m in messages),
recv_total=0,
messages=messages.copy(),
outb=b"",
)
sel.register(sock, events, data=data)
# ...
IyBtdWx0aWNvbm4tY2xpZW50LnB5CgppbXBvcnQgc3lzCmltcG9ydCBzb2NrZXQKaW1wb3J0IHNlbGVjdG9ycwppbXBvcnQgdHlwZXMKCnNlbCA9IHNlbGVjdG9ycy5EZWZhdWx0U2VsZWN0b3IoKQptZXNzYWdlcyA9IFtiIk1lc3NhZ2UgMSBmcm9tIGNsaWVudC4iLCBiIk1lc3NhZ2UgMiBmcm9tIGNsaWVudC4iXQoKZGVmIHN0YXJ0X2Nvbm5lY3Rpb25zKGhvc3QsIHBvcnQsIG51bV9jb25ucyk6CiAgICBzZXJ2ZXJfYWRkciA9IChob3N0LCBwb3J0KQogICAgZm9yIGkgaW4gcmFuZ2UoMCwgbnVtX2Nvbm5zKToKICAgICAgICBjb25uaWQgPSBpICsgMQogICAgICAgIHByaW50KGYiU3RhcnRpbmcgY29ubmVjdGlvbiB7Y29ubmlkfSB0byB7c2VydmVyX2FkZHJ9IikKICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCiAgICAgICAgc29jay5jb25uZWN0X2V4KHNlcnZlcl9hZGRyKQogICAgICAgIGV2ZW50cyA9IHNlbGVjdG9ycy5FVkVOVF9SRUFEIHwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFCiAgICAgICAgZGF0YSA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgKICAgICAgICAgICAgY29ubmlkPWNvbm5pZCwKICAgICAgICAgICAgbXNnX3RvdGFsPXN1bShsZW4obSkgZm9yIG0gaW4gbWVzc2FnZXMpLAogICAgICAgICAgICByZWN2X3RvdGFsPTAsCiAgICAgICAgICAgIG1lc3NhZ2VzPW1lc3NhZ2VzLmNvcHkoKSwKICAgICAgICAgICAgb3V0Yj1iIiIsCiAgICAgICAgKQogICAgICAgIHNlbC5yZWdpc3Rlcihzb2NrLCBldmVudHMsIGRhdGE9ZGF0YSkKCiMgLi4u