kas*_*erd 5 python sockets linux tcp
我有一个用 Python 编写的套接字代理,当它从一对通信对等方接收到 RST 时,它将通过让套接字被垃圾收集来关闭与两个对等方的连接。这会导致其他对等方看到 FIN 而不是 RST。
这意味着代理有效地将 RST 转换为 FIN,我认为这并不理想。
我发现在 Linux 中可以通过使用 family 地址调用 connect 来重置 TCP 连接AF_UNSPEC。但我还没有找到从 Python 程序中执行此操作的方法。
如何在 Python 中connect获取地址?AF_UNSPEC
到目前为止我已经尝试过的
我尝试查看help相关connect方法的输出并发现:
Help on built-in function connect:
connect(...)
connect(address)
Connect the socket to a remote address. For IP sockets, the address
is a pair (host, port).
Run Code Online (Sandbox Code Playgroud)
不幸的是,这并没有告诉我address为了构建AF_UNSPEC地址必须使用什么参数。
我尝试将原始套接字 fd 包装在一个新的套接字对象中,其族AF_UNSPEC如下:
socket.fromfd(s.fileno(), socket.AF_UNSPEC, 0)
Run Code Online (Sandbox Code Playgroud)
结果对象产生相同的帮助文本,并且任何调用connect新构造的套接字对象的尝试都会导致
socket.error: getsockaddrarg: bad family
Run Code Online (Sandbox Code Playgroud)
所以看来使用socket.fromfd可能不是我问题的答案。
您可以尝试使用将延迟时间设置为 0 的SO_LINGER套接字选项 ( )。在设置了 0 秒延迟时间的套接字上,将导致 RST 而不是 FIN。setsockoptcloseSO_LINGER