Socket SO_RCVTIMEO 超时是 C++/VC++ 中设置值的两倍 [英] Socket SO_RCVTIMEO Timeout is double the set value in C++/VC++

查看:29
本文介绍了Socket SO_RCVTIMEO 超时是 C++/VC++ 中设置值的两倍的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请显示下面的例子

int val = 120000;
setsockopt(connSock,SOL_SOCKET,SO_RCVTIMEO,(char*)&val,sizeof(int));

我在接收超时时设置了 120 秒,但需要 240 秒.

I set 120 seconds at receive timeout but it takes 240 seconds.

我认为超时是设定值的两倍.

I think timeout is double the set value.

怎么可能?

推荐答案

SO_RCVTIMEO 和 SO_SNDTIMEO 不适用于所有套接字操作,您应该使用非阻塞模式和 select.

SO_RCVTIMEO and SO_SNDTIMEO do not work on all socket operations, you should use non-blocking mode and select.

行为可能会在不同的操作系统配置上发生变化.在我的系统上,connect 在我在 SO_RCVTIMEO 中设置的值的两倍后超时.一个快速的技巧,比如在连接之前将 SO_RCVTIMEO 设置为 x/2 并在它工作之后将 x 设置为 x,但正确的解决方案是使用 select.

The behaviour may change on different operating system configurations. On my system the connect timeouts after two times the value I set in SO_RCVTIMEO. A quick hack like setting SO_RCVTIMEO to x/2 before a connect and x after it works, but the proper solution is using select.

关于这个问题的讨论(阅读评论回答):

Discussion on this problem (read comments to answer):

如何使用select来达到想要的结果:

How to use select to achive the desired result:

这篇关于Socket SO_RCVTIMEO 超时是 C++/VC++ 中设置值的两倍的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆