SylixOS 的 errno 是全局的么?

SylixOS 的 errno 是全局的么?

Q:遇到一个问题。read 函数返回 -1,紧接着打印 errno 是11。但是经过if条件分支后,打印的 errno 变成了 1503。此中间没有进行任何系统调用。如下图所示,问题是 errno 值变了,导致判断为 TCP 连接异常,于是直接把连接关闭了,搞不清 errno 值怎么会变成 1503?



socket 接口 recv 函数分为阻塞与非阻塞,返回值定义是 >0 表示读到的字节数,=0 表示连接关闭,<0 表示出错,errno 根据不同情况设置不同值。没有数据了一般设置 EAGAIN = -11。

每个核心执行流都有errno,不是全局的,errno可以用个临时变量在if前保存起来再用。

比如 A 线程执行系统 API 产生一个 errno,B 线程执行系统 API 会单独生成和维护一个 errno,A 和 B 线程中的 errno 互不影响,和 Linux 下的标准 posix 有点不同。


    • Related Articles

    • error: xxx-sylixos-elf-lzocom.exe

      Q:IDE 在编译工程时出现:xxxx-sylixos-elf-lzocom.exe  应用程序出错。 应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。信息如下图所示。 安装 vc2010_redist_x86.exe 即可解决此问题, 此文件在 IDE 软件安装包的 Tools 目录下(如 SylixOS IDE 3.9.11_professional\Tools) 。
    • 运行警告 "WARNING: ctx.vmem create error!" ?

      Q: SylixOS 程序运行时警告 "WARNING: ctx.vmem create error!" ? A:  SylixOS 动态加载器在加载应用程序后会尝试申请虚拟地址空间,如果申请的空间过大,会导致申请失败, 出现 "WARNING: ctx.vmem create error!"        可以调整环境变量SO_MEM_PAGES定义的大小,从而缩小申请的空间大小,避免出现警告
    • An error occurred.See error log for more details.

      问:  如何解决 IDE 在编译点选工程的时候出现 An error occurred.See error log for more details. 的问题。 解决方式: 删除工作目录下的 .metadata 后重新打开 IDE 编译 可以正常使用。 参考文章:IDE 工程出现在属性页面不能修改参数
    • SylixOS 动态库更新 version 不一致的问题

      Q:SylixOS 动态库更新 version 不一致的问题 首先 SylixOS 是允许多个进程对共享库文件进行代码段共享的(默认是共享打开的,可以使用 dlconfig share dis 命令进行关闭),代码段共享会出现一个问题:当 A  进程 使用一个 share.so 共享库的时候,B 进程也使用 该 share.so 的共享库,share.so 共享库因为 B 的原因需要修改,修改后,更新share.so文件,然后重启 B 进程,一般来说会出现错误,错误如下: ...
    • 应用程序报错:error function not implemented

      Q:运行应用程序提示如图的错误,对应的库已上传,在自己的设备上可以正常。其他设备会报错 “error function not implemented” 上传的时候没有设置 ftp 的 bin 模式,可以通过将原来的 bin 文件读出来和上传之前的 bin 文件对比查看其差异