2014-10-10 36 views
2

请,示出了示例下面插座SO_RCVTIMEO超时是在C++/VC双设定值++

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

我设定在接收超时120秒但它需要240秒。

我觉得超时是设定值的两倍。

怎么可能?

+0

您是否检查以确保'setsockopt()'没有返回错误?你期待什么代码适用于超时?请提供一个[SSCCE](http://sscce.org),显示双倍行动时间。 – 2014-10-10 17:14:08

回答

0

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

该行为可能会在不同的操作系统配置上发生更改。 在我的系统上,在我设置在SO_RCVTIMEO中的值两倍后,超时值为connect。一个简单的黑客就像在连接之前将SO_RCVTIMEO设置为x/2,并在其工作后将其设置为x,但正确的解决方案是使用select。

参考

谈这个问题(阅读评论回答):

如何使用选择才达到期望的结果: