getaddrinfo confusion (wine 1.5.5)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Question: How can it be that getaddrinfo when called by a game returns an error, but when I call it in a small test program with the same parameters, is succeeds?

Details:

I have a game (League of Legends) that gives an assertion failed before starting a game, as per this bug: http://bugs.winehq.org/show_bug.cgi?id=29609

I am using wine 1.5.5

Using "ollydbg" 110 from http://ollydbg.de I have tracked down the code path leading to the failed assertion.

The game calls getaddrinfo, checks the return value, and if it is not happy with it, eventually gives the assertion failed message.

Using the debugger, I figured out exactly what parameters is calls getaddrinfo with:

pNodeName = "" (pointer to empty string)
pServiceName = "0" (pointer to string "0")
pHints = Pointer to addrinfo structure filled as follows:
    ai_flags = 0x1 (AI_PASSIVE)
    ai_family = 0x2 (AF_INET)
    ai_socktype= 0x2 (SOCK_DGRAM)
    ai_protocol = 0x11 (IPPROTO_UDP)
    ai_addrlen = 0
    ai_canonname = NULL
    ai_addr = NULL
    ai_next = NULL
ppResult = (pointer to memory allocated by game)

What happens is that wine passes these parameters down to the native getaddrinfo on my platform (Linux, Fedora 17) as follows

getaddrinfo(hostname, "0", pUnixhints, ppResult)

Wine has some logic to turn a nodeName that is the empty string "", into the hostname before passing it to the native call.

Wine transforms the windows hints into unix hints with some helper functions, but they do not appear to change the contents at all for these particular values. The relevant code is in dlls/ws2_32/socket.c

When the game, through wine, calls my native getaddrinfo like that, it retuns -2 (E_NONAME) which is transformed by wine into WSAHOST_NOT_FOUND (0x2AF9) which the game doesn't like and leads to the assertion failed.

When I, in a small test program, call my native getaddrinfo with exactly the same parameters, it succeeds (returns 0).

How can this happen? Please, any ideas, to help me continue debugging this frustrating problem.

Thank you for reading this far.



[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux