强制执行类型_ssl.sslwrap文件函数参数

2024-09-25 16:30:58 发布

您现在位置:Python中文网/ 问答频道 /正文

在_ssl.sslwrap文件函数将检查传入的sock是否是的子类_插座.插座. 我传入了一个实现_插座.插座. 在

因为我的socket不是一个子类,所以很生气。这是我应该自己解决的问题,还是应该向python开发人员询问这个问题?在

这是来自ssl.SSLSocket.这让我感到悲伤:

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

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

更新:

我要调查一下twisted是如何做这些事情的。我的假插座太复杂了。但是,我仍然很好奇为什么\u ssl模块以这种方式强制使用套接字类型。在


Tags: 文件函数selfsslserver开发人员socket子类
1条回答
网友
1楼 · 发布于 2024-09-25 16:30:58

我同意显式地强制执行类型层次结构似乎不是python式的,您可能需要询问开发人员这方面的问题。在

哦,我想知道这是否与作为ssl和socket的实现模块有关。我没有使用过ssl,也几乎没有使用过socket,但是在使用它们直接使用\u ssl或\u socket时,是否确实有必要?在

无论如何,在此期间,一种解决方法可能是代理对象:

(a)从_socket.socket继承(因此声明它isinstance属于{}),但是

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

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

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, ... )

其他的Python是怎么想的?这是个好主意吗?在

相关问题 更多 >