Linux下socket非阻塞的一些技巧

57 篇文章 0 订阅

在Linux下,connect()建立连接,-1为失败,但是-1不一定就是完全失败!

-1的情况下,有的是因为非阻塞造成的,就是在error中设置了对应的出错情况,例如EINPROGRESS,EAGAIN等可以认为是“非致命错误”,认为是可以接受的,这种只是导致暂时阻塞等情况。

所以可以如下使用

int ret = connect(…);

if(!ret || noFatalError())
{
  //认为是成功的
}

bool nonFatalError()
{
   int err = errorno();
   return (err == EINPROGRESS || err == EAGAIN || err == EWOULDBLOCK || err == EINTR);
}

类似的技巧还可以用于区分read、write时,是真失败还是阻塞的时候

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值