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 aDWORDin 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() 具体实现是平台相关的,跨平台时需要谨慎,避免使用不兼容的选项。
本文介绍了如何在Linux和Windows中使用setsockopt设置socket接收超时,指出Windows中recv()在对端口关闭时的行为,并强调了在不同平台间操作的兼容性问题和相关错误代码。
1936

被折叠的 条评论
为什么被折叠?



