Comments (3)
另外,在day3中有个判断条件是(errno == EAGAIN) || (errno == EWOULDBLOCK),我查阅资料后发现,EAGAIN与EWOULDBLOCK是完全相同的宏,不明白为什么这里要用或关系
from 30daymakecppserver.
- 很入门的C/C++问题,建议先打好语言基础。
- 在标准中,EAGAIN被定义为资源短暂不可用,而EWOULDBLOCK被定义为操作阻塞,从定义上这两者不是一个概念。
在某些较老的unix系统中,这两者可能有不一样的实现。但对于GNU的libc库,这两者相同,从源码可以看到:
/* non-blocking and interrupt i/o */
#define EAGAIN 35 /* Resource temporarily unavailable */
#define EWOULDBLOCK EAGAIN /* Operation would block */
这两者定义为相同可能是为了g++编译器、os的实现方便,在编程时,需要认识清楚,可以参考《UNIX网络编程》非阻塞式编程相关章节。
这样用或操作,有两个好处:
- 程序逻辑更加健壮,让程序处理了资源短暂不可用、操作阻塞两种情况。
- 兼容了其他所有没有将EWOULDBLOCK和EAGAIN定义为相同的系统。
from 30daymakecppserver.
很入门的C/C++问题,建议先打好语言基础。
在标准中,EAGAIN被定义为资源短暂不可用,而EWOULDBLOCK被定义为操作阻塞,从定义上这两者不是一个概念。
在某些较老的unix系统中,这两者可能有不一样的实现。但对于GNU的libc库,这两者相同,从源码可以看到:
/* non-blocking and interrupt i/o */ #define EAGAIN 35 /* Resource temporarily unavailable */ #define EWOULDBLOCK EAGAIN /* Operation would block */这两者定义为相同可能是为了g++编译器、os的实现方便,在编程时,需要认识清楚,可以参考《UNIX网络编程》非阻塞式编程相关章节。
这样用或操作,有两个好处:
程序逻辑更加健壮,让程序处理了资源短暂不可用、操作阻塞两种情况。
兼容了其他所有没有将EWOULDBLOCK和EAGAIN定义为相同的系统。
大佬之后还会更新吗,最近在学习网络编程,觉得您写的教程特别易懂!
from 30daymakecppserver.
Related Issues (20)
- 在day 13中,是如何工程化的? HOT 1
- 催更催更,距离上次更新已经好几个月了 HOT 2
- day02的小小问题 HOT 2
- Day 10 的问题
- 请问M1芯片的Mac,安装 Ubuntu Docker 后,可以运行所有代码么
- day09 的 client.cpp 文件
- day10 中为什么要在 Acceptor.h 中引入头文件 <cstdio> ?
- 关于Acceptor的一个疑问 HOT 1
- 剩下的14天~~~
- 很有帮助,催更一下 HOT 3
- code16 如何编译,我用的是ubuntu,编译一堆问题
- 催更一下辛苦老哥啦~
- 域名过期
- errno:11 HOT 1
- day01-从一个最简单的socket开始:IPPROTO_UDP误写为IPPTOTO_UDP
- day06 的src/Server.cpp 文件缺少头文件 HOT 1
- day03中的server.cpp
- What's going on
- day16:当echo客户端断开连接时,服务器会发生Segmentation fault
- 催更
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from 30daymakecppserver.