socket 设置接收超时
代码实现
Linux 代码
struct timeval time;
time.tv_sec = 1;
time.tv_usec = 0;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &time, sizeof(time));
Windows 代码
DWORD time = 1000;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &time, sizeof(time));
注意
Windows:
Timeout value is aDWORD
in milliseconds, address passed tosetsockopt()
isconst char*
Linux:
Timeout value is astruct timeval
, address passed tosetsockopt()
isconst void*
Windows 上即使设置接收超时,若对方端口关闭,发送数据后
recv()
接收函数会立即返回,对应错误码WSAECONNRESET 10054
。
f**k windows 😃
setsockopt()
具体实现是平台相关的,跨平台时需要谨慎,避免使用不兼容的选项。