套接字SO_RCVTIMEO超时是C ++ / VC ++中设置值的两倍

时间:2014-10-10 11:09:43

标签: c++ sockets visual-c++

请显示以下示例

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

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

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

怎么可能?

2 个答案:

答案 0 :(得分:0)

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

行为可能会在不同的操作系统配置上发生变化。 在我的系统上connect超时后,我在SO_RCVTIMEO中设置的值的两倍。快速破解就像在连接之前将SO_RCVTIMEO设置为x/2并且在其工作之后设置x,但正确的解决方案是使用select。

参考

讨论这个问题(阅读评论):

如何使用select来获得所需的结果:

答案 1 :(得分:0)

SO_RCVTIMEO 不接受 int 作为超时。您正在寻找这样的东西:

struct timeval tv = {
    .tv_sec = 120
};

setsockopt(connSock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));