SocketTimeouts
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中,为某个数据读取操作设置超时。
这个函数只能从EA交易和脚本中调用,因为它们在自己的执行线程中运行。如果从指标调用,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);
}