SocketIsConnected

Comprueba si está conectado el socket en el momento actual.

bool  SocketIsConnected(
   const int  socket      // manejador del socket
   );

Parámetros

socket

[in]  Manejador del socket retornado por la función SocketCreate(). Al transmitir un manejador incorrecto, en _LastError se registra el error 5270 (ERR_NETSOCKET_INVALIDHANDLE).

Valor retornado

Retorna true si el socket está conectado, de lo contrario, false.

Observación

Con la ayuda de la función SocketIsConnected(), es posible comprobar la conexión del socket en este momento.

Solo se puede llamar la función desde los expertos y scripts, puesto que funcionan en su propio flujo de ejecución. Si se llama desde el indicador, GetLastError() retornará el error 4014 — "La función de sistema no está permitida para la llamada".

Ejemplo:

//+------------------------------------------------------------------+
//|                                                SocketExample.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2000-2024, MetaQuotes Ltd."
#property link        "https://www.mql5.com"
#property version     "1.00"
#property description "Para que el ejemplo funcione, añada Address a la lista de permitidos en los ajustes del terminal"
#property script_show_inputs
 
input string Address="www.mql5.com";
input int    Port   =80;
bool         ExtTLS =false;
//+------------------------------------------------------------------+
//| Enviando comando al servidor                                     |
//+------------------------------------------------------------------+
bool HTTPSend(int socket,string request)
  {
   char req[];
   int  len=StringToCharArray(request,req)-1;
   if(len<0)
      return(false);
//--- si se utiliza una conexión protegida por TLS a través del puerto 443
   if(ExtTLS)
      return(SocketTlsSend(socket,req,len)==len);
//--- si se utiliza una conexión TCP normal
   return(SocketSend(socket,req,len)==len);
  }
//+------------------------------------------------------------------+
//| Leyendo la respuesta del servidor                                |
//+------------------------------------------------------------------+
bool HTTPRecv(int socket,uint timeout)
  {
   char   rsp[];
   string result;
   uint   timeout_check=GetTickCount()+timeout;
//--- leemos los datos del socket mientras esté disponible, pero sin superar el timeout
   do
     {
      uint len=SocketIsReadable(socket);
      if(len)
        {
         int rsp_len;
         //--- diferentes comandos de lectura dependiendo de si la conexión es segura o no
         if(ExtTLS)
            rsp_len=SocketTlsRead(socket,rsp,len);
         else
            rsp_len=SocketRead(socket,rsp,len,timeout);
         //--- разберем ответ
         if(rsp_len>0)
           {
            result+=CharArrayToString(rsp,0,rsp_len);
            //--- imprimimos solo el encabezado de la respuesta
            int header_end=StringFind(result,"\r\n\r\n");
            if(header_end>0)
              {
               Print("Encabezado de respuesta HTTP recibido:");
               Print(StringSubstr(result,0,header_end));
               return(true);
              }
           }
        }
     }
   while(GetTickCount()<timeout_check && !IsStopped());
   return(false);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int socket=SocketCreate();
//--- проверим хэндл
   if(socket!=INVALID_HANDLE)
     {
      //--- si todo está en orden, nos conectamos
      if(SocketConnect(socket,Address,Port,1000))
        {
         Print("Establecida conexión a ",Address,":",Port);
 
         string   subject,issuer,serial,thumbprint;
         datetime expiration;
         //--- si la conexión está protegida por un certificado, mostraremos sus datos
         if(SocketTlsCertificate(socket,subject,issuer,serial,thumbprint,expiration))
           {
            Print("Certificado TLS:");
            Print("   Propietario:  ",subject);
            Print("   Emisor:  ",issuer);
            Print("   Número:     ",serial);
            Print("   Huella: ",thumbprint);
            Print("   Expiración: ",expiration);
            ExtTLS=true;
           }
         //--- enviamos al servidor una solicitud GET
         if(HTTPSend(socket,"GET / HTTP/1.1\r\nHost: www.mql5.com\r\nUser-Agent: MT5\r\n\r\n"))
           {
            Print("Solicitud GET enviada");
            //--- leemos la respuesta
            if(!HTTPRecv(socket,1000))
               Print("No se ha podido obtener una respuesta, error ",GetLastError());
           }
         else
            Print("No se ha podido enviar la solicitud GET, error ",GetLastError());
        }
      else
        {
         Print("La conexión a ",Address,":",Port," ha fallado, error ",GetLastError());
        }
      //--- cerramos el socket después del uso
      SocketClose(socket);
     }
   else
      Print("No se ha podido crear el socket, error ",GetLastError());
  }
//+------------------------------------------------------------------+

Mire también

SocketConnect, SocketIsWritable, SocketCreate, SocketClose