博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux非阻塞网络connect (记录)
阅读量:2220 次
发布时间:2019-05-08

本文共 820 字,大约阅读时间需要 2 分钟。

 unsigned long non_blocking = 1; 

unsigned long blocking = 0; 
fd_set rf_fdset; 
int retry = 5; 
struct timeval tv; 
char error; 
int length; 
network->address.sin_family = AF_INET; 
len = sizeof(network->address); 
ioctl(datalink->fd,FIONBIO,&non_blocking); 
try_again: 
ret = connect(datalink->fd, (const struct sockaddr *)&network->address, len); MOD_LOG(SYS_DATALINK_MOD,  FD_CLR(datalink->fd,&rf_fdset); 
FD_ZERO(&rf_fdset); 
FD_SET(datalink->fd, &rf_fdset); 
tv.tv_sec = 0; 
tv.tv_usec = 10; 
length = sizeof(int); 
if( select(datalink->fd+1, NULL, &rf_fdset, NULL, &tv) > 0) 
    if (FD_ISSET(datalink->fd,&rf_fdset)) 
    { 
        length = sizeof(error); 
        if(getsockopt(datalink->fd, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&length) < 0) 
        { 
            ret =0; 
        } else { 
            if(error == 0) 
            { ret =1; } 
            else ret =0; } 
        }
        else ret =0; 
    } 
    else 
        ret =0; 
 } else ret = 1;

转载地址:http://xhnfb.baihongyu.com/

你可能感兴趣的文章
探索Redis设计与实现2:Redis内部数据结构详解——dict
查看>>
探索Redis设计与实现3:Redis内部数据结构详解——sds
查看>>
探索Redis设计与实现4:Redis内部数据结构详解——ziplist
查看>>
探索Redis设计与实现6:Redis内部数据结构详解——skiplist
查看>>
探索Redis设计与实现5:Redis内部数据结构详解——quicklist
查看>>
探索Redis设计与实现8:连接底层与表面的数据结构robj
查看>>
探索Redis设计与实现7:Redis内部数据结构详解——intset
查看>>
探索Redis设计与实现9:数据库redisDb与键过期删除策略
查看>>
探索Redis设计与实现10:Redis的事件驱动模型与命令执行过程
查看>>
分布式系统理论基础1: 一致性、2PC和3PC
查看>>
分布式系统理论基础2 :CAP
查看>>
分布式系统理论基础3: 时间、时钟和事件顺序
查看>>
分布式系统理论基础4:Paxos
查看>>
分布式系统理论基础5:选举、多数派和租约
查看>>
分布式系统理论基础6:Raft、Zab
查看>>
分布式系统理论进阶7:Paxos变种和优化
查看>>
分布式系统理论基础8:zookeeper分布式协调服务
查看>>
搞懂分布式技术1:分布式系统的一些基本概念
查看>>
搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法
查看>>
搞懂分布式技术3:初探分布式协调服务zookeeper
查看>>