修改 PySocks 设置不会迁移已打开的连接
把 PySocks 套接字将来的代理配置与已经建立的连接区分开,在需要换线路时优先新建套接字。
set_proxy 保存的是 PySocks 套接字在建立连接时使用的代理配置。它并不会把一条正在运行的数据流从某个中间节点迁移到另一个中间节点。
连接一旦打开,它的字节就属于那条已经建立的通路。清空已保存的代理配置并不等于要求把连接直接移到目标地址,改变地址也不会把它切到新的出口。
如果要走另一条线路,应当新建套接字,有意识地配置它,再为目标地址建立新的连接。旧套接字则按应用正常的生命周期关闭。
把每个套接字自己的设置与全局默认值、或对 socket 模块的 monkey-patching 分开。全局改动可能影响其他代码之后创建的套接字,却没有说明现有套接字此刻正在做什么。
如果应用协议需要连续会话,重连也同样需要该协议的恢复逻辑。一条新的 TCP 通路和一个新的公网 IP 并不会自动保留应用的业务事务或已认证状态。