# SocketIsConnected Checks if the socket is currently connected. ``` bool  SocketIsConnected(    const int  socket      // socket handle    ); ``` Parameters socket [in]  Socket handle returned by the [SocketCreate()](/en/docs/network/socketcreate) function. When an incorrect handle is passed to [_LastError](/en/docs/predefined/_lasterror), the error 5270 (ERR_NETSOCKET_INVALIDHANDLE) is activated. Return Value Returns true if the socket is connected, otherwise - false. Note The SocketIsConnected() function allows checking the current socket connection status. The function can be called only from Expert Advisors and scripts, as they run in their own execution threads. If calling from an indicator, [GetLastError()](/en/docs/check/getlasterror) returns the error 4014 – "Function is not allowed for call". Example: ``` //+------------------------------------------------------------------+ //|                                            SocketIsConnected.mq5 | //|                                  Copyright 2024, MetaQuotes Ltd. | //|                                             https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2024, MetaQuotes Ltd." #property link      "https://www.mql5.com #property version     "1.00" #property description "Add Address to the list of allowed ones in the terminal settings to let the example work" #property script_show_inputs   input string Address    ="www.mql5.com"; input int    Port       =80; input bool   CloseSocket=true; bool         ExtTLS     =false; //+------------------------------------------------------------------+ //| Script program start function                                    | //+------------------------------------------------------------------+ void OnStart(void)   { //--- create a socket and get its handle    int socket=SocketCreate(); //--- check the handle    if(socket!=INVALID_HANDLE)      {       //--- if all is well, connect       if(SocketConnect(socket,Address,Port,1000))         {          PrintFormat("Established connection to %s:%d",Address,Port);            string   subject,issuer,serial,thumbprint;          datetime expiration;          //--- if connection is protected by certificate, display its data          if(SocketTlsCertificate(socket,subject,issuer,serial,thumbprint,expiration))            {             Print("TLS certificate:");             Print("   Owner:      ",subject);             Print("   Issuer:     ",issuer);             Print("   Number:     ",serial);             Print("   Print:      ",thumbprint);             Print("   Expiration: ",expiration);             ExtTLS=true;            }          //--- send GET request to the server          if(HTTPSend(socket,"GET / HTTP/1.1\r\nHost: www.mql5.com\r\nUser-Agent: MT5\r\n\r\n"))            {             Print("GET request sent");             //--- read response             if(!HTTPRecv(socket,1000))                Print("Failed to get a response, error ",GetLastError());            }          else             Print("Failed to send GET request, error ",GetLastError());         }       else         {          PrintFormat("Connection to %s:%d failed, error %d",Address,Port,GetLastError());         }       //--- if the flag is set, close the socket after use       if(CloseSocket)          SocketClose(socket);      }    else       Print("Failed to create a socket, error ",GetLastError());   //--- check server connection    bool connected=SocketIsConnected(socket); //--- terminate operation if no connection    if(!connected)      {       Print("No connection to server");      } //--- if server connection is present    else      {       Print("Connection to the server is available\nThe connection needs to be closed. Closing");       //--- close the socket and check the connection status again       SocketClose(socket);       connected=SocketIsConnected(socket);      }   //--- display the current server connection status    Print("Currently connected: ",(connected ? "opened" : "closed"));    /*    result in case CloseSocket = true:    No connection to server    Currently connected: closed      result in case CloseSocket = false:    Connection to the server is available    The connection needs to be closed. Closing    Currently connected: closed    */   } //+------------------------------------------------------------------+ //| Send command to server                                           | //+------------------------------------------------------------------+ bool HTTPSend(int socket,string request)   { //--- convert the string to a character array, discard the terminating zero    char req[];    int  len=StringToCharArray(request,req)-1;      if(len<0)       return(false); //--- if a secure TLS connection via port 443 is used    if(ExtTLS)       return(SocketTlsSend(socket,req,len)==len); //--- if a regular TCP connection is used    return(SocketSend(socket,req,len)==len);   } //+------------------------------------------------------------------+ //| Read server response                                             | //+------------------------------------------------------------------+ bool HTTPRecv(int socket,uint timeout_ms)   {    char   rsp[];    string result;    ulong  timeout_check=GetTickCount64()+timeout_ms; //--- read data from the socket while there is some, but not longer than timeout    do      {       uint len=SocketIsReadable(socket);         if(len)         {          int rsp_len;          //--- different read commands depending on whether the connection is secure or not          if(ExtTLS)             rsp_len=SocketTlsRead(socket,rsp,len);          else             rsp_len=SocketRead(socket,rsp,len,timeout_ms);          //--- parse response          if(rsp_len>0)            {             result+=CharArrayToString(rsp,0,rsp_len);             //--- display response header only             int header_end=StringFind(result,"\r\n\r\n");               if(header_end>0)               {                Print("HTTP answer header received:");                Print(StringSubstr(result,0,header_end));                return(true);               }             //--- update read timeout expiration time             timeout_check=GetTickCount64()+timeout_ms;            }         }      }    while(GetTickCount64()