connet()超时连接的一般方
2008-10-19 13:34
85 查看
connet()超时连接的一般方
原文地址:http://www.linuxdiyf.com/bbs/viewthread.php?tid=111439&pid=562826&page=1&extra=page%3D#pid562826LINUX下的方法:
在阻塞套接字的一般情况下,connect ()直到客户端对SYN消息的ACK消息到达之前才会返回。使connect()调用具有超时机制的一个方法是让套接字成为非阻塞的套接字体,然后用select()来等待它完成。复制内容到剪贴板代码:
s = socket(AF_INET, SOCK_STREAM, 0); //下面获取套接字的标志 if ((flags = fcntl(s, F_GETFL, 0)) < 0) { //错误处理 } //下面设置套接字为非阻塞 if (fcntl(s, F_SETFL, flags | O_NONBLOCK) < 0) { //错误处理 } if ((retcode = connect(s, (struct sockaddr*)&peer, sizeof(peer)) && errno != EINPROGRESS)) { //因为套接字设为NONBLOCK,通常情况下,连接在connect()返回 //之前是不会建立的,因此它会返回EINPROGRESS错误,如果返回 //任何其他错误,则要进行错误处理 } if (0 == retcode) { //如果connect()返回0则连接已建立 //下面恢复套接字阻塞状态 if (fcntl(s, F_SETFL, flags) < 0) { //错误处理 } //下面是连接成功后要执行的代码 exit(0) } FD_ZERO(&rdevents); FD_SET(s, &rdevents); //把先前的套接字加到读集合里面 wrevents = rdevents; //写集合 exevents = rdevents; //异常集合 tv.tv_sec = 5; //设置时间为5秒 tv_tv_usec = 0; retcode = select(s+1, &rdevents, &wrevents, &exevents, &tv); if (retcode < 0) { //select返回错误??? //错误处理 } else if (0 == retcode) { //select 超时??? //超时处理 } esle { //套接字已经准备好 if (!FD_ISSET(s, &rdevents) && !FD_ISSET(s, &wrevents)) { //connect()失败,进行错处理 } if (getsockopt(s, SOL_SOCKET, SO_ERROR, &err, &len) < 0) { //getsockopt()失败,进行错处理 } if (err != 0) { //connect()失败,进行错处理 } //到这里说明connect()正确返回 //下面恢复套接字阻塞状态 if (fcntl(s, F_SETFL, flags) < 0) { //错误处理 } //下面是连接成功后要执行的代码 exit(0) }
相关文章推荐
- 让你的DBCP连接池连接不超时
- SQL 2008 域账户新建连接慢或偶尔超时问题
- mysql 8小时空闲后连接超时的问题
- 在客户端配置TNS测试报错ORA-12170:TNS:连接超时
- Java基础网络---2-----连接到服务器(设置链接超时时间)
- python下设置urllib连接超时
- 【转载】Socket中如何设置连接超时
- 无法连接上 archive.ubuntukylin.com:10006 (61.144.43.73),连接超时的错误。
- pytest paramiko 连接超时
- 解决办法之“超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小 ”
- Mysql 连接数据库超时设置autoReconnect=true
- Linux下Socket连接超时的一种实现方法
- 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
- Android SDK Manager配置中遇到 连接被拒绝, 连接超时问题解决办法之一
- MySQL导入SQL文件过大或连接超时的解决办法/在navcat执行sql卡在0%
- JDBC 数据库连接池 最大最小值设定 数据库连接超时问题
- 同时大量连接导致的DDOS攻击,导致收发器宕机,用户大面积超时掉线
- activemq 消费者超时设置和失败超时连接测试
- JDBC连接超时,导致数据库操作失败
- 配置远程桌面服务会话的超时设置和重新连接设置