socket.unbind or socket.unlisten? - socket.error: (48, 'Address already in use')

Steve Holden steve at
Sun Feb 1 13:45:42 CET 2009

Laszlo Nagy wrote:
>> 8<------------------------------
>>> .......  Setting the
>>> SO_REUSEADDR flag on POSIX fixes this problem (don't set it on Windows,
>>> though).
>> Why not?  I have been merrily setting it, and I have not noticed
>> anything weird.
>> (yet)
> Please see my original post. I specifically stated that I do not want to
> use setsockopt and be able to listen on the same port from many
> processes. I knew that I could use SO_REUSEADDR, but I'm heistating to
> do so. I must guarantee that only one process listens on a given port at
> the same time.
This appears to demonstrate a misunderstanding of the purpose of the

SO_REUSEADDR should be used to avoid the TIME_WAIT state when the
current listening process terminates. If you do not use it then there
will be a certain period during which no other process can listen on
that port, and it will be reusable only after the TIME_WAIT is over.
This can easily be seen by using the netstat utility.

See "Pitfall 3" in

> Maybe I could use some kind of locking, but it would be too difficult:
> - mutexes are great but they are platform dependent and they are not in
> the standard lib
> - the listening processes do not see each other's home directory so file
> locking cannot be used for this
> - these processes will probably listen on many ports at the same time,
> it is also a problem with mutexes/file locks (who wants 50 lock files to
> be created?)
Complete red herring:  there is no way for multiple processes to listen
to the same port: this would lead to ambiguity in the protocol stack.

Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC    

More information about the Python-list mailing list