As a result of this patch (which is currently applied in cvs head):
http://www.winehq.com/hypermail/wine-patches/2002/12/0009.html
WS_bind() currently does this before every call to bind():
WS_setsockopt( s, WS_SOL_SOCKET, WS_SO_REUSEADDR, (char*)&on, sizeof(on) );
Basically, it sets SO_REUSEADDR for every call to WS_bind().
I can't imagine this is the correct thing to do. According to MSDN, bind() should fail unless the program has explicitly set SO_REUSEADDR.
See Error code WSAEADDRINUSE at:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/win...
I found that this patch causes major problems with the xten sipphone client. The xten client does not explicitly set SO_REUSEADDR and depends on bind() failing if it tries to bind to the same local address/port twice.
When the sipphone client needs a socket, it starts at port 8000, and calls bind() on successive ports until bind() returns success. So normally, if the program is already using port 8000, then bind() will fail and will try port 8001. However, with the above patch in place, bind() always works. So then the sipphone client will be using port 8000 twice, which the program is not designed to handle.
If I remove the call to WS_setsockopt(), the xten sipphone client works correctly.
I am proposing that the portion of the patch applied to WS_bind() be removed unless someone has a convincing arguement that the patch is actually valid.
Jeremy Shaw.