Hi everybody. Currently, my favorite Game is "IL2-Sturmovik Forgotten
Battles", especially it's online-mode. The Game itself is running nearly
flawless and at good performance, but I encountered a network-problem which
didn't allow the game to connect to any remote server, so I've analyzed and
solved the problem.
This is what the game does:
1. Create a Datagram-socket
2. Call gethostbyname(own_name) to find out the current IP-Adress
3. Bind the socket to that IP-Adress
4. Try connecting to the remote game using exactly that socket
The Problem: gethostbyname(own_name) always returns 127.0.0.1. I've searched a
bit on the internet, and this seems always to be the case, not just on my
computer.
The socket is then bound to the ip-adress 127.0.0.1, and to it's corresponding
loopback-interface, so it's unusable. Any connection-request times out.
I don't really know much about Networking itself, I just know how to use
IP-Networking, but I think it's pretty boring(especially the way it all is
implemented) so I don't even know what IPV6 is, and I don't know if my patch
is compatible with it(although I think so). Also I don't know if returning
127.0.0.1 is in fact not a bug but desired, and the game is doing something
wrong here.
But if it is desired that gethostbyname(own_name) preferrably returns the
public IP-Adress, then this code should solve the problem, although maybe a
bit more checking should be done which IP-Adress should be chosen as the
public one for cases with multiple non-loopback-interfaces.
I submit this patch to the wine-devel-list so people who know more about all
the network-handling can discuss about it, and decide whether it should be
put to cvs, or whether there is a better Solution for this problem.
The Code enumerates all available Interfaces through the kernel, and decides
which one should be used in a very naive way.
greetings,
David Nolden (btw. my subscription to the list doesn't seem to be complete
yet, I'm sending this anyway)