1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
From d0eee8a7ec74f370df43f342a8b2977f99e7cb40 Mon Sep 17 00:00:00 2001
From: NelloKudo <marshnelloosu@gmail.com>
Date: Thu, 14 Aug 2025 14:18:26 +0200
Subject: [PATCH] HACK: ws2_32: Block first internet connection for some games
Fixes launch issues/high CPU usage, can be disabled in-case of
various issues with WINE_DISABLE_DISCONNECT=1.
---
dlls/ws2_32/socket.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index d4223e93bd1..3030d8df6bb 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -1262,6 +1262,25 @@ int WINAPI closesocket( SOCKET s )
return 0;
}
+static BOOL is_mhy(void)
+{
+ static volatile char cache = -1;
+ BOOL ret = cache;
+ if (ret == -1)
+ {
+ const WCHAR *p, *name = NtCurrentTeb()->Peb->ProcessParameters->ImagePathName.Buffer;
+ if ((p = wcsrchr(name, '/')))
+ name = p + 1;
+ if ((p = wcsrchr(name, '\\')))
+ name = p + 1;
+ ret = (!wcsicmp(name, L"GenshinImpact.exe") ||
+ !wcsicmp(name, L"StarRail.exe") ||
+ !wcsicmp(name, L"YuanShen.exe") ||
+ !wcsicmp(name, L"ZenlessZoneZero.exe"));
+ cache = ret;
+ }
+ return ret;
+}
/***********************************************************************
* connect (ws2_32.4)
@@ -1272,6 +1291,18 @@ int WINAPI connect( SOCKET s, const struct sockaddr *addr, int len )
IO_STATUS_BLOCK io;
HANDLE sync_event;
NTSTATUS status;
+ static int count = 0;
+ const char* env = getenv("WINE_DISABLE_DISCONNECT");
+
+ // HACK: Block first connection for mhy games
+ // can be disabled with WINE_DISABLE_DISCONNECT=1
+ if (!count && !(env && atoi(env) == 1) && is_mhy())
+ {
+ FIXME("Toggle detected, disabling first connection..\n");
+ count = 1;
+ WSASetLastError(WSAECONNREFUSED);
+ return SOCKET_ERROR;
+ }
TRACE( "socket %#Ix, addr %s, len %d\n", s, debugstr_sockaddr(addr), len );
--
2.50.1
|