gpt4 book ai didi

python - _ssl.sslwrap 函数参数的类型强制

转载 作者:太空宇宙 更新时间:2023-11-03 14:21:25 24 4
gpt4 key购买 nike

_ssl.sslwrap 函数似乎检查传入的 sock 是否是 _socket.socket 的子类。我正在传递一个实现 _socket.socket 接口(interface)的类。

它很生气,因为我的套接字不是子类。这是我应该解决的问题,还是我应该向 python 开发人员询问的问题?

这是 ssl.SSLSocket.init 中的代码,这让我很伤心:

self._sslobj = _ssl.sslwrap(self._sock, server_side,
keyfile, certfile,
cert_reqs, ssl_version, ca_certs,
ciphers)

在我的例子中,self._sock 是我的自定义套接字类的一个实例。

更新:

我将研究其中一些东西的扭曲程度。我的假套接字变得太复杂了。但是,我仍然很好奇为什么 _ssl 模块会按原样强制执行套接字类型。

最佳答案

我同意明确强制执行类型层次结构似乎不符合 Python 风格,您可能想问问开发人员。

OTOH,我想知道它是否与 _ssl 和 _socket 是 ssl 和 socket 的实现模块有关。我没有用过ssl,也几乎没有用过socket,但是在使用的时候直接用_ssl或者_socket是不是真的日常有必要?

无论如何,与此同时,一个解决方法可能是一个代理对象:

(a) 继承自 _socket.socket(因此声称它是 _socket.socket实例),但是

(b) 将其所有消息传递给您实际的“套接字接口(interface)”兼容对象。

我还没有测试过这段代码,所以我希望这不是一个卑鄙的贡献:

def socketify( socket_protocol_compliant_object ):
import _socket
class proxy( _socket.socket ):
def __init__( self ): pass
def __getattribute__( self, attr_name ):
return getattr( socket_protocol_compliant_object, attr_name )
def __setattribute__( self, attr_name, new_value ):
setattr( socket_protocol_compliant_object, attr_name, new_value )
return proxy()

self._sslobj = _ssl.sslwrap( socketify(self._sock), server_side, keyfile, ... )

其他 Pythonist 怎么看?这是个好主意吗?

关于python - _ssl.sslwrap 函数参数的类型强制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3433115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com