A_OSWindows网络helper 2023-10-27 Source Edit History 【网络编程】【Windows】socket 保活 文章目录 概述:Socket 保活 123456789101112131415161718192021222324252627282930313233343536373839404142BOOL _KeepAlive(SP_SOCKET fd){ //定义结构及宏 struct KeepAlive { u_long onoff; u_long keepalivetime; u_long keepaliveinterval; };#define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4) //KeepAlive实现 KeepAlive inKeepAlive = { 0 }; //输入参数 unsigned long ulInLen = sizeof(KeepAlive); KeepAlive outKeepAlive = { 0 }; //输出参数 unsigned long ulOutLen = sizeof(KeepAlive); unsigned long ulBytesReturn = 0; //keepalive xp以前的系统发送5次,xp之后的系统发送10 inKeepAlive.onoff = 1; inKeepAlive.keepaliveinterval = 5000; //两次KeepAlive探测间的时间间隔 inKeepAlive.keepalivetime = 5000; //开始首次KeepAlive探测前的TCP空闭时间 if (WSAIoctl((SOCKET)fd, SIO_KEEPALIVE_VALS, (LPVOID)&inKeepAlive, ulInLen, (LPVOID)&outKeepAlive, ulOutLen, &ulBytesReturn, NULL, NULL) == SOCKET_ERROR) { LOGT("Set Keep Alive FAILED."); return FALSE; } else { LOGT("Set Keep Alive OK."); return TRUE; }}