在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时,是真失败还是阻塞的时候。