Socket being garbage collected too early

Steve Holden steve at holdenweb.com
Fri Dec 17 01:07:41 CET 2004


Scott Robinson wrote:

> 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
> 
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?

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



More information about the Python-list mailing list