ws2_32: Work around the host name resolving to 127.x.x.x when using that for binding.

Paul Chitescu paulc at
Tue Apr 15 06:11:46 CDT 2008

On Mon, 14 Apr 2008, Kai Blin wrote:
> On Monday 14 April 2008 18:42:26 Paul Chitescu wrote:
>> Binding to a specific address is the only easy way of detecting which
>> interface an UDP packet was received on since recvfrom() only gives source
>> address, not destination. Listening on would make impossible to
>> tell which interface a packet was received on. Furthermore, a program that
>> explicitely tries to bind to each interface would fail all but the first
>> bind and possibly bail out. Probably many games that use UDP would break.
> I'm currently trying to fix apps that fail doing the following (which seems to
> be a popular way among game developers), in pseudo-code.
> hostname = gethostname();
> hostent = gethostbyname(hostname);
> sockaddr->sin_addr = hostent->addr;
> sock = socket();
> bind(sock, sockaddr);
> Which, as Christoph noted, cause windows apps to bind to loopback addresses,
> breaking the networking. This only started to happen recently as recently
> Linux distros started mapping the machine's hostname to a loopback address. I
> don't think Wine ever used the registry for anything like that.
> Cheers,
> Kai
> -- 
> Kai Blin
> WorldForge developer
> Wine developer
> Samba team member
> --
> Will code for cotton.

Hi, Kai!

Your patch seems quite safe to me as it checks lots of stuff. I disagreed 
to Christoph Frick's proposal of always binding to

As a security enhancement, what about randomly initializing the last 3 
octets of magic_loopback_addr at every run instance? This could help fend 
off potential attacks targeted at buggy applications running in Wine by 
sending this special address over some other protocol. A remote attacker 
can convince a local application to listen on all interfaces including 
Internet attached ones while thinking it (safely) listens only on 


Paul Chitescu

More information about the wine-devel mailing list