SocketTimeouts

Define os tempos limite para receber e enviar dados para o objeto do sistema do soquete.

bool  SocketTimeouts(
   int           socket,               // soquete
   uint          timeout_send_ms,      // tempo limite para envio de dados
   uint          timeout_receive_ms    // tempo limite de aquisição de dados
   );

Parâmetros

socket

[in]  Identificador do soquete retornado pela função SocketCreate. Ao passar um identificador inválido para _LastError é registrado o erro 5270 (ERR_NETSOCKET_INVALIDHANDLE).

timeout_send_ms

[in]  Tempo limite de envio de dados em milissegundos.

timeout_receive_ms

[in]  Tempo limite para receber dados em milissegundos.

Valor retornado

Retorna true em caso de sucesso, caso contrário, false.

Observação

Não confunda o tempo limite dos objetos do sistema e o tempo limite definido ao ler os dados via SocketRead. SocketTimeout define os tempos limite uma vez para o objeto do soquete no sistema operacional. Esses tempos limite serão aplicados a todas as funções de leitura e de envio de dados através desse soquete. Em SocketRead, o tempo limite é definido para uma operação de leitura de dados específica.

A função só pode ser chamada por EAs e scripts, pois eles trabalham em seu próprio fluxo de execução. Quando chamado do indicador GetLastError() retorna o erro 4014 — "Função do sistema não permitida para chamada".

Exemplo:

//+------------------------------------------------------------------+
//|                                               SocketTimeouts.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"
 
#define   TIMEOUT_SEND     5000
#define   TIMEOUT_RECEIVE  5000
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart(void)
  {
//--- criamos um soquete e obtemos seu identificador
   int socket=SocketCreate();
 
   if(socket==INVALID_HANDLE)
     {
      Print("SocketCreate() failed. Error ",GetLastError());
      return;
     }
//--- definimos tempos limite para receber e enviar dados para o objeto do sistema de soquete
   if(SocketTimeouts(socket,TIMEOUT_SEND,TIMEOUT_RECEIVE))
      PrintFormat("timeouts were successfully set",socket,TIMEOUT_SEND,TIMEOUT_RECEIVE);
   else
      PrintFormat("SocketTimeouts(%d, %I64d, %I64d) failed. Error %d",socket,TIMEOUT_SEND,TIMEOUT_RECEIVE,GetLastError());
//--- fechamos o soquete
   SocketClose(socket);
  }