您的位置:首页 > 运维架构 > Linux

Linux下socket非阻塞的一些技巧

2012-12-10 16:55 399 查看
在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时,是真失败还是阻塞的时候
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: