Q:遇到一个问题。read 函数返回 -1,紧接着打印 errno 是11。但是经过if条件分支后,打印的 errno 变成了 1503。此中间没有进行任何系统调用。如下图所示,问题是 errno 值变了,导致判断为 TCP 连接异常,于是直接把连接关闭了,搞不清 errno 值怎么会变成 1503?
每个核心执行流都有errno,不是全局的,errno可以用个临时变量在if前保存起来再用。
比如 A 线程执行系统 API 产生一个 errno,B 线程执行系统 API 会单独生成和维护一个 errno,A 和 B 线程中的 errno 互不影响,和 Linux 下的标准 posix 有点不同。