| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5220 人关注过本帖
标题:瞬时处理connetc() 错误的方法, (指数补偿)
取消只看楼主 加入收藏
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
收藏
 问题点数:0 回复次数:0 
瞬时处理connetc() 错误的方法, (指数补偿)
处理瞬时connect() 错误的方法。 这在一个负载很重的服务器上很有可能发生
程序代码:
#define MAXSLEEP 128

int connect_retry(int sockfd, const struct sockaddr *addr, socklen_t alen) {

    int nsec;
    /*
     * Try to connect with exponential backoff.
     */

    for( nsec = 1; nsec <= MAXSLEEP; nsec <<= 1) {
        
        if( connect(sockfd, addr, alen) == 0) {
            /*
               Connection accepted
             */
            return 0;
        }
        /*
           Delay befor tring again
         */
        if(nsec <= MAXSLEEP/2)
            sleep(nsec);
    }
    return (-1);
}


这个函数使用的是指数补偿(exponential backoff) 的算法。如果调用connect() 失败,

进程就休眠一小段时间然后再尝试, 每循环一次增加每次尝试的延迟。

如果套接字描述符处于非阻塞模式下,那么在连接不能马上建立时,

connect() 将返回 -1, 并且将errno设为 EINPROGRESS

应用程序可以使用poll 或者 select来判断文件描述符何时可写
搜索更多相关主题的帖子: 服务器 return 
2012-08-24 14:48
快速回复:瞬时处理connetc() 错误的方法, (指数补偿)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040208 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved