//+------------------------------------------------------------------+ //| SocketDiag.mq5 — diagnostic: test MQL5 outbound sockets | //+------------------------------------------------------------------+ #property strict void TestConnect(const string host, const int port) { PrintFormat("[SocketDiag] === test %s:%d ===", host, port); ResetLastError(); int s = SocketCreate(); PrintFormat("[SocketDiag] SocketCreate -> handle=%d GetLastError=%d", s, GetLastError()); if(s == INVALID_HANDLE || s == 0) return; ResetLastError(); bool ok = SocketConnect(s, host, port, 3000); PrintFormat("[SocketDiag] SocketConnect(%s,%d,3000) -> %s | GetLastError=%d", host, port, (ok ? "TRUE" : "FALSE"), GetLastError()); PrintFormat("[SocketDiag] SocketIsConnected -> %s", (SocketIsConnected(s) ? "TRUE" : "FALSE")); if(ok) { string msg = "{\"action_type\":\"Heartbeat\",\"symbol\":\"MQL5_DIAG\"}\r\n"; uchar buf[]; int n = StringToCharArray(msg, buf, 0, WHOLE_ARRAY, CP_UTF8) - 1; ResetLastError(); int sent = SocketSend(s, buf, n); PrintFormat("[SocketDiag] SocketSend -> %d bytes | GetLastError=%d", sent, GetLastError()); } SocketClose(s); Print("[SocketDiag] === done ==="); } void OnStart() { Print("[SocketDiag] MQL5 outbound socket diagnostics"); TestConnect("127.0.0.1", 5555); // Centaur router (listening) TestConnect("127.0.0.1", 22346); // MCP server (listening) TestConnect("127.0.0.1", 59999); // closed port (comparison) }