dpnet: Initialize winsock.

Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alistair Leslie-Hughes 2016-11-02 09:13:49 +00:00 committed by Alexandre Julliard
parent eef69511f5
commit db003d4a08
7 changed files with 50 additions and 7 deletions

View file

@ -1,6 +1,6 @@
MODULE = dpnet.dll
IMPORTLIB = dpnet
IMPORTS = dxguid uuid ole32 advapi32
IMPORTS = dxguid uuid ole32 advapi32 ws2_32
C_SRCS = \
address.c \

View file

@ -115,6 +115,8 @@ static HRESULT WINAPI IDirectPlay8ClientImpl_Initialize(IDirectPlay8Client *ifac
This->msghandler = pfn;
This->flags = dwFlags;
init_winsock();
return DPN_OK;
}
@ -443,6 +445,8 @@ static HRESULT WINAPI lobbyclient_Initialize(IDirectPlay8LobbyClient *iface, voi
This->msghandler = msghandler;
This->flags = flags;
init_winsock();
return DPN_OK;
}

View file

@ -40,15 +40,46 @@ WINE_DEFAULT_DEBUG_CHANNEL(dpnet);
static HINSTANCE instance;
static BOOL winsock_loaded = FALSE;
static BOOL WINAPI winsock_startup(INIT_ONCE *once, void *param, void **context)
{
WSADATA wsa_data;
DWORD res;
res = WSAStartup(MAKEWORD(1,1), &wsa_data);
if(res == ERROR_SUCCESS)
winsock_loaded = TRUE;
else
ERR("WSAStartup failed: %u\n", res);
return TRUE;
}
void init_winsock(void)
{
static INIT_ONCE init_once = INIT_ONCE_STATIC_INIT;
InitOnceExecuteOnce(&init_once, winsock_startup, NULL, NULL);
}
/* At process attach */
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
TRACE("%p,%x,%p\n", hInstDLL, fdwReason, lpvReserved);
if (fdwReason == DLL_PROCESS_ATTACH) {
instance = hInstDLL;
DisableThreadLibraryCalls(hInstDLL);
}
return TRUE;
TRACE("%p,%x,%p\n", hInstDLL, fdwReason, lpvReserved);
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
instance = hInstDLL;
DisableThreadLibraryCalls(hInstDLL);
break;
case DLL_PROCESS_DETACH:
if (lpvReserved) break;
if(winsock_loaded)
WSACleanup();
break;
}
return TRUE;
}
/***********************************************************************

View file

@ -26,6 +26,7 @@
#endif
#include <wine/list.h>
#include "winsock2.h"
#include "wine/unicode.h"
#include "dplay8.h"
@ -135,6 +136,7 @@ extern HRESULT DPNET_CreateDirectPlay8ThreadPool(LPCLASSFACTORY iface, LPUNKNOWN
extern HRESULT DPNET_CreateDirectPlay8LobbyClient(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppobj) DECLSPEC_HIDDEN;
extern void init_dpn_sp_caps(DPN_SP_CAPS *dpnspcaps) DECLSPEC_HIDDEN;
extern void init_winsock(void) DECLSPEC_HIDDEN;
/* used for generic dumping (copied from ddraw) */
typedef struct {

View file

@ -101,6 +101,8 @@ static HRESULT WINAPI IDirectPlay8LobbiedApplicationImpl_Initialize(IDirectPlay8
This->usercontext = pvUserContext;
This->connection = pdpnhConnection;
init_winsock();
return DPN_OK;
}

View file

@ -122,6 +122,8 @@ static HRESULT WINAPI IDirectPlay8PeerImpl_Initialize(IDirectPlay8Peer *iface,
This->msghandler = pfn;
This->flags = dwFlags;
init_winsock();
return DPN_OK;
}

View file

@ -118,6 +118,8 @@ static HRESULT WINAPI IDirectPlay8ServerImpl_Initialize(IDirectPlay8Server *ifac
This->msghandler = pfn;
This->flags = dwFlags;
init_winsock();
return DPN_OK;
}