http://bugs.winehq.org/show_bug.cgi?id=33008
--- Comment #24 from facoptere@gmail.com --- (In reply to Erich Hoover from comment #23)
(In reply to facoptere from comment #22)
The application works, but not properly since 0.0.0.0 is bound ;) Consequence of which I can't start 2 UDP servers on the same machine...
You should be able to bind as many servers as you want to 0.0.0.0, when Wine activates this codepath it turns on SO_REUSEADDR on the socket so that other binds are not prohibited. What exactly happens when you try to start another UDP server?
The server that binds the primary IP, binds obviously 0.0.0.0 and so catches all the UDP traffic. The other server, which bound properly the second (virtual) IP, does not work anymore after that. BTW, the 2 servers run in separate unix accounts, separate windows "c:" drives, and there are 2 /usr/local/bin/wineserver running, that may explain the situation. The 2 servers need some regular restarts at different times.
...
If you know some Wine options that tell to respect arguments given in bind(), I would like to know them either.
At the moment you have to edit the Wine source to disable the option due to a problem with glibc not properly updating a header. If you edit dlls/ws2_32/socket.c line 166 by adding "#undef IP_UNICAST_IF" then it will go back to the old behavior.
Thanks a lot for the tip. I will have a look at this.
...
Wine sets the kernel option IP_UNICAST_IF to ensure that outbound packets go out the requested interface and it also configures a Linux Packet Filter to only accept packets on the interface you requested. Unless you are doing something really screwy ...
I use shorewall as firewall. I don't know whether this meets the "screwy" definition.