Add manual tests for half open connections

This commit is contained in:
B. Blechschmidt 2023-04-10 10:57:41 +02:00
parent 2cf7c9cdea
commit 70cea8e11f
5 changed files with 55 additions and 1 deletions

View file

@ -114,7 +114,6 @@ or through `ip -6 route del default`, which causes the `libc` resolver (and othe
requests for IPv6 addresses.
## TODO
- Improve handling of half-open connections
- Increase error robustness (reduce `unwrap` and `expect` usage)
- UDP support for SOCKS
- Native support for proxying DNS over TCP or TLS

View file

@ -0,0 +1,12 @@
import socket
import time
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(('116.203.215.166', 1337))
s.sendall('I am closing the write end, but I can still receive data'.encode())
s.shutdown(socket.SHUT_WR)
while True:
data = s.recv(1024)
if not data:
break
print(data.decode())

View file

@ -0,0 +1,16 @@
import socket
import time
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('0.0.0.0', 1337))
s.listen()
conn, addr = s.accept()
with conn:
while True:
data = conn.recv(1024)
if not data:
break
print(data.decode())
time.sleep(3)
conn.sendall('This will still be received by the client that has closed its write end'.encode())

View file

@ -0,0 +1,12 @@
import socket
import time
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(('116.203.215.166', 1337))
while True:
data = s.recv(1024)
if not data:
break
print(data.decode())
time.sleep(3)
s.sendall('Message after server write end close'.encode())

View file

@ -0,0 +1,15 @@
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('0.0.0.0', 1337))
s.listen()
conn, addr = s.accept()
with conn:
conn.sendall('I am closing the write end, but I can still receive data'.encode())
conn.shutdown(socket.SHUT_WR)
while True:
data = conn.recv(1024)
if not data:
break
print(data.decode())