Scott Robinson wrote:
Unfortunately, assuming it's being garbage collected might turn out to be incorrect. What evidence do you have that the socket "disappears"? Do you get a segmentation ault, or what?I have been having trouble with the garbage collector and sockets. Unfortunately, google keeps telling me that the problem is the garbage collector ignoring dead (closed?) sockets instead of removing live ones. My problem is
x.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) do_stuff(x.sock)
def do_stuff(sock): sock_list.append(sock)
once do_stuff finishes, x.sock disappears, and I can only believe it is being garbage collected. I'd like to hear the standard means for avoiding this issue (gc appears to have only the interface to declare something garbage, not to declare something not garbage).
Scott Robinson
If the socket simply fails to work that would be a different case altogether, but it seems to me that we need a bit more evodence that the anecdotal stuff you've provided so far.
Quite apart from anything else, by the way, the code you posted appears to use a global sock_list. A reference b y that list would in any case stop the socket from being garbage collected (quite apart from the fact that the socket module itself will do so as long as the socket is open).
So, could we see an error message, or some other evidence of what is going on. For example, after the call to do_stuff(), what do you see if you
print sock_list
for example. I think your initial hypothesis is insufficient.
regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -- http://mail.python.org/mailman/listinfo/python-list