| 26 | |
| 27 | |
| 28 | def thread_server(port_holder: list[int]) -> None: |
| 29 | server = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) |
| 30 | server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |
| 31 | server.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0) # allow IPv4/IPv6 in Windows |
| 32 | server.bind(('::', 0)) |
| 33 | port_holder[0] = server.getsockname()[1] |
| 34 | server.listen(1) |
| 35 | |
| 36 | conn, addr = server.accept() |
| 37 | conn.recv(1024) |
| 38 | client_ip, *_ = addr |
| 39 | response = f'HTTP/1.1 200 OK\r\nContent-Length: {len(client_ip)}\r\n\r\n{client_ip}'.encode() |
| 40 | conn.send(response) |
| 41 | conn.close() |
| 42 | server.close() |
| 43 | |
| 44 | |
| 45 | def truncating_server(port_holder: list[int]) -> None: |