|
Huzaifa Tapal
huzaifa at hostway.com
Wed Jul 6 11:11:11 EDT 2005
Hello All,
I recently came across a problem in making secure socket connections
only introduced in the mod_python (persistent) version of my
application. It seems that after a number of successful socket
connections, somehow and in someway the interpreter gets corrupted and
start receiving an error stating "socket object is not of type _sock"
coming from the socket.py module in python.
To further explain, in httplib.py the connect method in HTTPSConnection,
creates a socket instance and then passes it the ssl() method in
socket.py to make it a secure socket connection. That is where the
problem occurs and somehow the ssl() method starts claiming that its
receiving a bad type of socket object.
After a whole lot of poking around I think the problem is in socket.py's
implementation of the modular level ssl() method and that it is not
thread safe. Here is what the ssl() method looks like:
def ssl(sock, keyfile=None, certfile=None):
if hasattr(sock, "_sock"):
sock = sock._sock
return _realssl(sock, keyfile, certfile)
I thought that the hasattr() call and then the referencing of the passed
socket object was somehow corrupting the mod_python interpreter and
thereafter any ssl() socket connections were failing with that error.
So I made a patch to httplib.py's connect() method to pass in a
socket._sock to the ssl() method instead so that the ssl() method
doesn't have to do the switch and that seems to work fine.
After that successful attempt, we tried to determine, whether hasattr
check was need at all and that we can simply just modify the ssl()
method to be as following:
def ssl(sock, keyfile=None, certfile=None):
return _realssl(sock._sock, keyfile, certfile)
That reintroduced the original error. At this point I am stumped as to
what could be causing this type of interpreter corruption to happen for
the ssl() method. I know the fact that the ssl() method is global in
the socket.py module has something to do with it but I can't figure it
how does the passed sock object be corrupted everytime.
Does anybody have any insight into this problem or has run into this
problem at all?
Hozi
|