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)
On Mon, Dec 12, 2005 at 04:44:23PM +0100, David Nolden wrote:
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 dont know if this helps for your problem (i never tried IL2 and PF multiplayer, but i have a similar network problem with NR2003, GPL, LFS,...). this games check the registry for the ip-address and so forth.
i entered some keys described by microsoft[1] to help this games find their "way to the net". maybe your "localhost" problem is only a result from not finding the proper address in the first place (you can find this out by ``WINEDEBUG=+reg ./il2fb.exe''.
@all: AFAIK there where some talk/patch about WINE beeing able to detect/set this settings while starting wineserver in the registry by itself?
[1] http://support.microsoft.com/default.aspx?scid=kb;en-us;120642