AIX下的errno

    今天在suse下写了个多线程的socket程序,其中用到了select来控制connect超时。具体方法如下:
    1 .建立 socket
    2 .将该 socket 设置为非阻塞模式
    3 .调用 connect()
    4 .判断errno是否为EINPROGRESS,是:继续下一步,否:出错返回
    5 .使用 select() 检查该 socket 描述符是否可写(注意,是可写)
    6 .根据 select() 返回的结果判断 connect() 结果
    7 .将 socket 设置为阻塞模式(如果你的程序不需要用阻塞模式的,这步就省了,不过一般情况下都是用阻塞模式的,这样也容易管理)
    在suse下测试一切正常。可是移到AIX下就出问题了,在第4步判断errno时,发现errno总是0,因此立刻出错返回。
    在网上搜索了一番,发现问题所在。原来linux系统的errno是线程安全的,但AIX的errno不是。要让AIX的errno线程安全,需要在编译时加上宏定义:-D_THREAD_SAFE.

    总结:unix及类unix系统不是不好,但在实现上总有那么一点点的差别,对软件开发人员来说绝对是一种折磨。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值