You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过setsockopt()禁用套接字接收超时?附C++设置代码

如何禁用套接字的SO_RCVTIMEO接收超时?

要禁用之前设置的套接字接收超时,其实很简单——你只需要把timeval结构体的秒数和微秒数都设为0,然后再次调用setsockopt()就可以了。

具体代码实现

struct timeval time_val_struct = {0};
// 将tv_sec和tv_usec都设为0,代表禁用超时
time_val_struct.tv_sec = 0;
time_val_struct.tv_usec = 0;

int return_value = setsockopt(this->m_fdSocket, SOL_SOCKET, SO_RCVTIMEO,
                             (const char*)&time_val_struct, sizeof(time_val_struct));
if (return_value == -1) {
    // 可根据需求添加错误处理逻辑,比如打印errno排查问题
    return;
}

原理说明

POSIX标准明确规定:当SO_RCVTIMEO对应的timeval结构体两个字段均为0时,就表示取消接收超时设置,套接字会恢复到默认的无超时状态(如果之前是阻塞模式就回到阻塞,非阻塞模式则保持非阻塞但不再有超时限制)。

你之前通过给tv_sec赋值1设置了1秒超时,现在把两个字段都清零后调用setsockopt(),就会覆盖之前的超时配置,回到最初的无超时状态。

小提示

  • 必须确保tv_sec和tv_usec都被设为0,只设置其中一个无法达到禁用超时的效果;
  • 调用setsockopt()后记得检查返回值,若返回-1可通过errno查看具体错误(比如套接字无效、权限不足等)。

内容的提问来源于stack exchange,提问作者A. Smoliak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:43:05