问题描述
请显示下面的例子
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++ 中设置值的两倍的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!