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时,是真失败还是阻塞的时候。
-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时,是真失败还是阻塞的时候。
相关文章推荐
- linux非阻塞的socket EAGAIN的错误处理
- window和linux下,设置socket为阻塞模式
- linux 客户端 Socket 非阻塞connect编程
- Linux环境下一些实用的技巧
- 对于linux socket与epoll配合相关的一些心得记录
- [原创]对于linux socket与epoll配合相关的一些心得记录_凌晓_百度空间
- Linux UDP socket 设置为的非阻塞模式与阻塞模式区别
- 应该知道的Linux一些操作技巧
- [linux] 将socket设置为非阻塞(non-blocking)
- linux下将socket设置为非阻塞的方法
- 你应该知道的一些Linux技巧
- soket编程相关(二)如何判断连接状态断开,Linux:C/Socket多路复用select(),阻塞
- 如何设置linux socket为非阻塞
- C++编程:socket设置为非阻塞方式(windows和linux)1
- 技巧:Linux I/O重定向的一些小技巧
- linux非阻塞的socket EAGAIN的错误处理
- linux 阻塞socket与非阻塞socket
- Linux常用命令行及一些技巧
- Deepin linux的一些问题和使用技巧