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:
parent
eef69511f5
commit
db003d4a08
|
@ -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 \
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -101,6 +101,8 @@ static HRESULT WINAPI IDirectPlay8LobbiedApplicationImpl_Initialize(IDirectPlay8
|
|||
This->usercontext = pvUserContext;
|
||||
This->connection = pdpnhConnection;
|
||||
|
||||
init_winsock();
|
||||
|
||||
return DPN_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -122,6 +122,8 @@ static HRESULT WINAPI IDirectPlay8PeerImpl_Initialize(IDirectPlay8Peer *iface,
|
|||
This->msghandler = pfn;
|
||||
This->flags = dwFlags;
|
||||
|
||||
init_winsock();
|
||||
|
||||
return DPN_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -118,6 +118,8 @@ static HRESULT WINAPI IDirectPlay8ServerImpl_Initialize(IDirectPlay8Server *ifac
|
|||
This->msghandler = pfn;
|
||||
This->flags = dwFlags;
|
||||
|
||||
init_winsock();
|
||||
|
||||
return DPN_OK;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue