On Tue, 27 Jan 2009 10:49:03 +0100, Laszlo Nagy <gand...@shopzeus.com> wrote:
I have a program that uses socket.bind() and socket.listen() frequently. After that program stops, it is not able to bind() again for a while:

File "/home/gandalf/Python/Lib/orb/accesspoints/srvtcp.py", line 27, in __init__
   self.serversocket.bind((self.listen_address,self.port))
 File "<string>", line 1, in bind
socket.error: (48, 'Address already in use')


The problem with this, is that this server program SOMETIMES need to be restarted very quickly. I tried to find the solution in the socket module. But there is no "socket.unbind" or "socket.unlisten". How can I tell the OS that I do not want to listen on that address anymore, so other programs can bind on it immediatelly?

(Yes I know that I can use setsockopt to allow listening multiple sockets on the same address, but this is NOT what I need...)

Actually, SO_REUSEADDR is probably just what you want.  Since I can't see
your code and I don't know under what situations it fails, I can only guess
at the problem, but my guess is that you have connections from the first run
of your app left in the TIME_WAIT state and they are preventing you from
binding to the address again in the second run of your app.  Setting the
SO_REUSEADDR flag on POSIX fixes this problem (don't set it on Windows,
though).

Jean-Paul
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to