私はPythonで書かれたソケットプロキシを持っています。通信プロキシのペアからRSTを受け取ると、ソケットがガベージコレクションされることによって両方のピアへの接続が閉じられます。この結果、他のピアはRSTではなくFINを表示します。PythonでTCPソケットをリセットするにはどうしたらいいですか?
これは、プロキシが効果的にRSTをFINに変換することを意味します。これは理想的ではないと思います。
Linuxでreset a TCP connnectionに接続するには、アドレスAF_UNSPEC
を使用してconnectを呼び出すことができます。しかし、私はこれをPythonプログラムから行う方法を見つけていません。
connect
〜AF_UNSPEC
のアドレスはどうすればよいですか?私に何address
引数を教えてくれない
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).
残念ながら:私は、関連するconnect
方法についてhelp
出力を見てみましたし、これを見つけた私は、これまで
を試してみましたが、何
アドレスAF_UNSPEC
を構築する必要があります。
私はこのような家族AF_UNSPEC
で新しいソケットオブジェクトの元のソケットのfdをラップしようとした:
socket.fromfd(s.fileno(), socket.AF_UNSPEC, 0)
結果のオブジェクトが同じヘルプテキストおよび新しく構築されたソケットオブジェクトにconnect
を呼び出すしようとする試みを作ります結果は
socket.error: getsockaddrarg: bad family
です。socket.fromfd
のように見えますが、おそらく私の質問に対する答えではありません。
私は 'c.setsockopt(socket.SOL_IP、socket.SO_LINGER、0)'をテストしたが動作しなかった。私が望んでいたように 'FIN'では' RST'ではなくコネクションが閉じられました。 – kasperd