2010-08-08 3 views
0

_ssl.sslwrap 함수는 전달 된 양말이 _socket.socket의 하위 클래스인지 확인합니다. _socket.socket의 인터페이스를 구현하는 클래스를 전달 중입니다._ssl.sslwrap 함수의 유형 적용

내 소켓이 하위 클래스가 아니기 때문에 화를 낼 수 있습니다. 이게 내 편이 좋을 것인가, 아니면 파이썬 개발자들로부터 물어봐야 할 것이냐?

다음은 ssl.SSLSocket의 코드입니다. 나에게 슬픔을주고있다 초기화하기 : 내 경우

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

을 self._sock 내 커스텀 소켓 클래스의 인스턴스입니다.

UPDATE :이 물건의 일부를 수행하는 방법 트위스트을 조사하기 위하여려고하고있다

. 가짜 소켓이 너무 복잡해지고 있습니다. 그러나, 나는 아직도 _ssl 모듈이 소켓 유형을 강제하는 이유가 무엇인지 궁금하다.

답변

1

명시 적으로 유형 계층 구조를 적용하는 것이 Python 계열이 아닌 것으로 알고 이에 대한 개발자에게 질문 할 수 있습니다.

OTOH, 나는 sssl 및 socket의 구현 모듈 인 _ssl 및 _socket과 관련이 있는지 궁금합니다. 나는 ssl을 사용하지 않았고 소켓을 간신히 사용했지만 _ssl 또는 _socket을 직접 사용하기 위해 소켓을 사용할 때는 실제로 필요합니까?

어쨌든, 그 사이에, 한 가지 해결 방법은 프록시 객체 구현 될 수 있음 :

(a), 아직

(b)는 전달 (IT _socket.socketisinstance 그 항 않으며 따라서 등) _socket.socket 상속 모든 메시지는 실제 "소켓 인터페이스"호환 객체에 있습니다.

이 코드를 테스트하지 않았습니다, 그래서 비열한 기여하지 희망 :

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

다른 Pythonists은 어떻게 생각하세요? 이것은 좋은 생각입니까?