- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
_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/
_ssl.sslwrap 函数似乎检查传入的 sock 是否是 _socket.socket 的子类。我正在传递一个实现 _socket.socket 接口(interface)的类。 它很生气,因为
我正在尝试通过在 python(2.7.8) 中使用 boto 与 aws 建立 ssl 连接。内部它使用的是 gevent 函数。我收到这样的错误- ` File "/usr/lib/python2
我是一名优秀的程序员,十分优秀!