SocketTimeouts

Устанавливает таймауты получения и отправки данных для системного объекта сокета.

bool  SocketTimeouts(
   int           socket,               // сокет
   uint          timeout_send_ms,      // таймаут отправки данных
   uint          timeout_receive_ms    // таймаут получения данных
   );

Параметры

socket

[in]  Хэндл сокета, возвращаемый функцией SocketCreate. При передаче неверного хэндла в _LastError записывается ошибка 5270 (ERR_NETSOCKET_INVALIDHANDLE).

timeout_send_ms

[in]  Таймаут отправки данных в миллисекундах.

timeout_receive_ms

[in]  Таймаут получения данных в миллисекундах.

Возвращаемое значение

Возвращает true в случае успеха, иначе false.

Примечание

Не путайте таймауты системных объектов и таймауты, устанавливаемые при чтении данных через SocketRead. SocketTimeout устанавливает таймауты один раз для объетка сокета в операционной системе. Эти таймауты будут применяться ко всем функциям чтения и отправки данных через этот сокет. В SocketRead таймаут устанавливается для конкретной операции чтения данных.

Функцию можно вызывать только из экспертов и скриптов, так как они работают в собственном потоке выполнения. При вызове из индикатора GetLastError() вернет ошибку 4014 – "Системная функция не разрешена для вызова".

Пример:

//+------------------------------------------------------------------+
//|                                               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)
  {
//--- создаём сокет и получаем его хэндл
   int socket=SocketCreate();
 
   if(socket==INVALID_HANDLE)
     {
      Print("SocketCreate() failed. Error ",GetLastError());
      return;
     }
//--- устанавливаем таймауты получения и отправки данных для системного объекта сокета
   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());
//--- закроем сокет
   SocketClose(socket);
  }