connect超时设置.阻塞和非阻塞 ioctlsocket函数

1.调用ioctlsocket函数进行阻塞和非阻塞控制:

unsigned long flag=1; //1的时候为非阻塞,0的时候为阻塞
ioctlsocket(sock,FIONBIO,&flag);
  //FIONBIO:允许或禁止套接口s的非阻塞模式

2.对于connect的连接问题,在connect之后,如果网络不好,ip地址无用,就会出现大概20及几多秒的时间等待。那怎么优化这个问题?

看下面的代码

timeval timeout ;//设置超时时间
fd_set fd;
int ret;
connect( sock, (sockaddr*)addr,sizeof(addr));
FD_ZERO(&fd);
FD_SET(sock,&fd);

timeout.tv_sec = 5;
timeout.tv_usec =0;
ret = select(0,0,&fd,0,&timeout);

if ( ret <= 0 )
{
    closesocket(sock); 
}

以下给出一些函数的意思:

int select (int maxfd + 1,fd_set *readset,fd_set *writeset,fd_set *exceptset,const struct timeval * timeout);
参数一:最大的文件描述符加1。
参数二:用于检查可读性,
参数三:用于检查可写性,
参数四:用于检查 带外数据
参数五:一个指向timeval结构的 指针,用于决定select等待I/o的最长时间。如果为空将一直等待。 timeval结构的定义:struct timeval{
long tv_sec; // seconds
long tv_usec; // microseconds
}
返回值的含义:
>0:就绪描述字的正数目
-1:出错
0 :超时

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢吃一口烤肉的啵啵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值