SocketTimeouts

ソケットシステムオブジェクトのデータを送受信するためのタイムアウトを設定します。

bool  SocketTimeouts(
  int           socket,             // ソケット
  uint         timeout_send_ms,     // データ送信のタイムアウト
  uint         timeout_receive_ms   // データ受信のタイムアウト
  );

パラメータ

socket

[in] SocketCreate関数で返されるソケットハンドルです。無効なハンドルが渡されると、5270 (ERR_NETSOCKET_INVALIDHANDLE)が_LastErrorに書かれます。

timeout_send_ms

[in] ミリ秒単位のデータ送信タイムアウト

timeout_receive_ms

[in] ミリ秒単位のデータ受信タイムアウト<.

戻り値

成功の場合はtrue、それ以外の場合はfalse

注意事項

システムオブジェクトのタイムアウトをSocketReadで設定されたデータ受信タイムアウトと混乱しないでください。SocketTimeoutはオペレーティングシステムのソケットオブジェクトに対して1回タイムアウトを設定します。これらのタイムアウトは、このソケットを介してデータを読み書きするためのすべての関数に適用されます。SocketReadでは、タイムアウトは特定のデータ読み取り操作に対して設定されます。

この関数は独自のスレッド内で実行されるエキスパートアドバイザーやスクリプトのみから呼び出すことが出来ます。指標から呼び出すと、GetLastError()はエラー4014「Function is not allowed for call(関数呼び出しの許可がありません)」を返します。

例:

//+------------------------------------------------------------------+
//|                                               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
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
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);
 }