码迷,mamicode.com
首页 > 其他好文 > 详细

fcntl设置无阻塞的超时连接

时间:2014-05-16 02:45:36      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:解决方案   服务器   return   

场景描述:采用fcntl函数设置无阻塞套接字,尝试连接远程服务器,连接的时候出现如下的错误:

 if(fcntl(sock, F_SETFL, O_NONBLOCK) == -1)
   return -1;

 printf("Connect return retval = %d,sock =%d\n",retval,sock);
    retval = connect(sock, (struct sockaddr *)&edpinfo->servAddr, sizeof(struct sockaddr));
    perror("connect");
我先查了一下Operation now in progress是socket的阻塞了,要把socket设置成非阻塞模式,其实我也不是很明白fcntl这个函数的作用,但是从O_NONBLOCK来看,这个应该是把socket 设置成非阻塞模式了,

问题的根源在于:调用连接函数,但是没有等待返回,而是采用select套接字,等待连接的返回,如果在超时的时间内没有返回证明连接时失败。

正确的解决方案:

这是正常现象, EINPROGRESS说明非阻塞connect正在进行中,不算错误,接下来应该select检查socket的写事件,一旦写事件返回,那么getsockopt SOL_SOCKET + SO_ERROR 看是否返回错误,没有返回错误说明连接成功

fcntl设置无阻塞的超时连接,布布扣,bubuko.com

fcntl设置无阻塞的超时连接

标签:解决方案   服务器   return   

原文地址:http://5228690.blog.51cto.com/5218690/1412076

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!