Entweder die meisten sind vom Verständigkeitsgott geküsst worden oder ich verstehe dein genaues Problem / Ansatzpunkt nicht anhand deiner Erklärung / Skizzierung. Du hast ein Fehler bemerkt, aufgrund von?
Einer falschen Konfiguration auf meiner Seite.
Das Finding hat mich viel Zeit gekostet, das Fixen war nicht so wild.
Konkret hab ich in meiner serverinfo.py den Main-Port sagen wir A eingetragen, ein Core zu diesem Port existierte aber nicht. Also hat man eine "Fehler beim Verbinden mit dem Server" Meldung bekommen, nach dem initialen "Anmeldevorgang läuft". Der Output von Metin2 in diesem Case (auf dem Auth Core) ist:
- [2023-08-25 22:00:24.090] [trace] Handshake: client_time 0 server_time 36750
- [2023-08-25 22:00:24.090] [trace] AUTH_PHASE 00000258445F7950
- [2023-08-25 22:00:24.169] [trace] Packet Analyze [Header 111][bufferLeft 144]
- [2023-08-25 22:00:24.169] [trace] InputAuth Analyze Header[111]
- [2023-08-25 22:00:24.170] [trace] InputAuth::Login : lead0x194(9) desc 00000258445F7950
- [2023-08-25 22:00:24.170] [trace] VERSION CHECK 123 123
- [2023-08-25 22:00:24.170] [trace] SetLoginKey 2026264663
- [2023-08-25 22:00:24.198] [trace] QID_AUTH_LOGIN: START 2026264663 00000258445F7950
- [2023-08-25 22:00:24.199] [trace] Create_Time 1607773915 20201212
- [2023-08-25 22:00:24.207] [trace] QID_AUTH_LOGIN: SUCCESS lead0x194
- [2023-08-25 22:00:24.208] [trace] SendAuthLogin lead0x194 key 1
- [2023-08-25 22:00:24.294] [trace] AuthLogin result 1 key 2026264663
- [2023-08-25 22:00:24.356] [trace] SYSTEM: closing socket. DESC #548
Alles anzeigen
Weiter passierte nichts. Und auf der Suche nach dem Fehler hab ich gemerkt, dass ich den gesamten Prozess zunächst einmal überblicken können muss, bevor ich weiß warum es an dieser Stelle nicht weiter geht. Ich wüsste sonst überhaupt nicht, wo ich ansetzen soll und blind suchen, wollte ich nicht - Das ist meist deprimierend und nicht von Erfolg gekrönt.
Wie so häufig ist aber eine falsche Konfiguration die häufigste Fehlerursache. Und jetzt kommts:
Wenn ein Socket nicht erreichbar ist, hat die WSAGetLastError-Methode der winsock Library folgende Fehler-ID ausgegeben:
- // A non-blocking socket operation could not be completed immediately.
- //
- #define WSAEWOULDBLOCK 10035L
und nicht wie erwartet
- /*
- * This is used instead of -1, since the
- * SOCKET type is unsigned.
- */
- #define INVALID_SOCKET (SOCKET)(~0)
- #define SOCKET_ERROR (-1)
Und was macht Metin bei dieser Fehler ID? Genau, sie ignorieren und nichts loggen!
- if (connect(m_sock, reinterpret_cast<PSOCKADDR>(&m_addr), m_addr.GetSize()) == SOCKET_ERROR)
- {
- int error = WSAGetLastError();
- if (error != WSAEWOULDBLOCK)
- {
- ...
- }
- }
Hoffe das genügt dir als Abriss, was meine Intention war bei dem Vorgehen.