# SocketCreate Create a socket with specified flags and return its handle. ``` int  SocketCreate(    uint     flags         // flags    ); ``` Parameters flags [in]  Combination of flags defining the mode of working with a socket. Currently, only one flag is supported — SOCKET_DEFAULT. Return Value In case of a successful socket creation, return its handle, otherwise [INVALID_HANDLE](/en/docs/constants/namedconstants/otherconstants). Notes To free up computer memory from an unused socket, call [SocketClose](/en/docs/network/socketclose) for it. You can create a maximum of 128 sockets from one MQL5 program. If the limit is exceeded, the error 5271 (ERR_NETSOCKET_TOO_MANY_OPENED) is written to [_LastError](/en/docs/predefined/_lasterror). 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: ``` //+------------------------------------------------------------------+ //|                                                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 "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; bool         ExtTLS =false; //+------------------------------------------------------------------+ //| Send command to the server                                       | //+------------------------------------------------------------------+ bool HTTPSend(int socket,string request)   {    char req[];    int  len=StringToCharArray(request,req)-1;    if(len<0)       return(false); //--- if secure TLS connection is used via the port 443    if(ExtTLS)       return(SocketTlsSend(socket,req,len)==len); //--- if standard TCP connection is used    return(SocketSend(socket,req,len)==len);   } //+------------------------------------------------------------------+ //| Read server response                                             | //+------------------------------------------------------------------+ bool HTTPRecv(int socket,uint timeout)   {    char   rsp[];    string result;    uint   timeout_check=GetTickCount()+timeout; //--- read data from sockets till they are still present but not longer than timeout    do      {       uint len=SocketIsReadable(socket);       if(len)         {          int rsp_len;          //--- various reading 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);          //--- analyze the response          if(rsp_len>0)            {             result+=CharArrayToString(rsp,0,rsp_len);             //--- print only the response header             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);               }            }         }      }    while(GetTickCount()