小猪你好,还是connect 函数的阻塞问题
上次问过一次,是connect 函数有没有阻塞的问题, 答案是 tcp 连接的时候有
连接如下
http://community.csdn.net/Expert/topic/3446/3446216.xml?temp=.5350611
我又参考了一篇文章:
Socket中如何设置连接超时
作者:AntGhazi
http://dev.csdn.net/article/11/11620.shtm
作者的意思是: 先把socket设为非阻塞, 然后connect ,此时connect 会马上返回,
然后在后面 使用select 函数 ,具体的等待就是由此函数来完成的
我现在的问题是:
在tcp连接的 client端, 创建socket后, 由于默认是阻塞socket,
所以 紧接着 用connect 函数 ,如果server端没开的话,
connect 函数 不应该返回, 因为这是阻塞的socket,
但事实表明 connect 在几秒后也返回了,也就是说,阻塞的socket
对 connect函数 并不阻塞,这是怎么回事???
小猪在回答上个问题的时候说:
阻塞的socket有个默认的连接超时,超过时间连接不上就会返回了,
这个默认的连接超时是可以设置的。
那么 这个 阻塞的 连接超时 应该在什么时候设置呢? 你给的代码如下
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(cClient, &r);
timeout.tv_sec = 15; //连接超时15秒
timeout.tv_usec =0;
select(0, 0, &r, 0, &timeout);
因为当时 select 函数不理解,所以迟迟没有提出问题,现在看来
select 函数 是 配合非阻塞的 socket ,用来不断查询 socket的状态,
上面的代码 用在 非阻塞的 socket 中 是可以达到等待一定时间目的,
可是 用在阻塞的socket中 好像对 connect 函数并没有影响
请大家看看 ,谢谢