请显示以下示例
int val = 120000;
setsockopt(connSock,SOL_SOCKET,SO_RCVTIMEO,(char*)&val,sizeof(int));
我在接收超时时设置了120秒,但需要240秒。
我认为超时是设定值的两倍。
怎么可能?
答案 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));