SocketTimeouts

Festlegen eines Timeouts für das Senden und Empfangen der Daten eines Sockets

bool  SocketTimeouts(
   int           socket,               // Socket
   uint          timeout_send_ms,      // Timeout für das Senden von Daten
   uint          timeout_receive_ms    // Timeout für das Empfangen von Daten
   );

Parameter

socket

[in]  Das Handle des Sockets, das von der Funktion SocketCreate erzeugt worden war. Wurde ein ungültiges Handle erstellt, wird der Fehler 5270 (ERR_NETSOCKET_INVALIDHANDLE) der Variablen _LastError zugewiesen.

timeout_send_ms

[in]  Timeout für das Schreiben der Daten in Millisekunden.

timeout_receive_ms

[in]  Timeout für das Lesen der Daten in Millisekunden.

Rückgabewert

Gibt true im Erfolgsfall zurück, andernfalls false.

Hinweis

Verwechseln Sie nicht die Timeouts der Systemobjekte mit denen, die für das Lesen der Daten mit SocketRead eingestellt wurden. SocketTimeout setzt einmalig Timeouts für ein Socket-Objekt im Betriebssystem. Diese Timeouts sind auf alle Funktionen zum Lesen und Senden von Daten über diesen Sockel anzuwenden. In SocketRead wird der Timeout für einen bestimmten Datenlesevorgang eingestellt.

Die Funktion kann nur von Expert Advisors und Skripten aufgerufen werden, da sie in ihrem eigenen Ausführungsthread laufen. Wenn sie ein Indikator aufruft, wird von GetLastError() der Fehler 4014 – "Funktionsaufruf ist nicht erlaubt" ausgeworfen.

Beispiel:

//+------------------------------------------------------------------+
//|                                               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
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart(void)
  {
//--- Socket erstellen und sein Handle zuweisen
   int socket=SocketCreate();
 
   if(socket==INVALID_HANDLE)
     {
      Print("SocketCreate() failed. Error ",GetLastError());
      return;
     }
//--- Festlegen der Timeouts für den Empfang und das Senden von Daten eines Socket-Systemobjekts
   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());
//--- Schließen des Sockets
   SocketClose(socket);
  }