wininet: Call WSAStartup/WSACleanup to mime the Windows behavior
Bruno Jesus
00cpxxx at gmail.com
Fri Jul 4 08:04:39 CDT 2014
On Fri, Jul 4, 2014 at 9:43 AM, Thomas Faber <thomas.faber at reactos.org> wrote:
> Hey Bruno,
>
>> +static void init_ws2_32(void)
>> +{
>> + static int once;
>> + if (once++) return;
>> + hws2_32 = GetModuleHandleA("ws2_32.dll");
>> + pWSAStartup = (void *)GetProcAddress(hws2_32, "WSAStartup");
>> + pWSACleanup = (void *)GetProcAddress(hws2_32, "WSACleanup");
>> +}
>> +
>> +static void free_ws2_32(void)
>> +{
>> + FreeLibrary(hws2_32);
>> +}
>
> GetModuleHandle doesn't increase the reference count so you probably
> shouldn't call FreeLibrary.
Thanks, I misread MSDN. It says that only GetModuleHandleEx require
the FreeLibrary call.
>
>> + /* initialize winsock DLL here as expected by some broken applications */
>> + if (!winsock_init++)
>> + {
>> + char buffer[128];
>> + init_ws2_32();
>> + pWSAStartup(MAKEWORD( 1, 1 ), buffer);
>> + }
>
> I believe Windows initializes with version 2. At least that's what my
> old test says (line 105):
I based the call in the relay log from native wininet:
0024:Call ws2_32.WSAStartup(00000101,0033e378) ret=76c16d16
> https://code.reactos.org/browse/reactos/trunk/rostests/apitests/wininet/InternetOpen.c?hb=true
> (free to use under LGPL... I can make it explicit in the source file,
> or help with getting it in Winetest format if desired)
>
> By the way, the same applies to winhttp in case you're interested:
> https://code.reactos.org/browse/reactos/trunk/rostests/apitests/winhttp/WinHttpOpen.c?hb=true
Ok, thanks for the information.
> Thanks!
> -Thomas
Thanks again,
Bruno
More information about the wine-devel
mailing list