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은 운영 체제의 소켓 개체에 대해 시간 초과를 한 번 설정합니다. 이러한 타임아웃은 이 소켓을 통해 데이터를 읽고 전송하는 모든 함수에 적용됩니다. SocketRead에서는, 타임아웃이 특정한 데이터 읽기 동작을 위해 설정되어 있습니다.

이 함수는 자체 실행 스레드에서 실행되므로 Expert Advisor 및 스크립트에서만 호출할 수 있습니다. 지표에서 호출하는 경우, 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
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                          |
//+------------------------------------------------------------------+
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);
  }