VS2010的errno.h

每次升级vs总会遇到一些问题,果然这次M$也没让我们失望。在vs2010的errno.h中添加了POISIX如下

/* POSIX SUPPLEMENT */
#define EADDRINUSE      100
#define EADDRNOTAVAIL   101
#define EAFNOSUPPORT    102
#define EALREADY        103
#define EBADMSG         104
#define ECANCELED       105
#define ECONNABORTED    106
#define ECONNREFUSED    107
#define ECONNRESET      108
#define EDESTADDRREQ    109
#define EHOSTUNREACH    110
#define EIDRM           111
#define EINPROGRESS     112
#define EISCONN         113
#define ELOOP           114
#define EMSGSIZE        115
#define ENETDOWN        116
#define ENETRESET       117
#define ENETUNREACH     118
#define ENOBUFS         119
#define ENODATA         120
#define ENOLINK         121
#define ENOMSG          122
#define ENOPROTOOPT     123
#define ENOSR           124
#define ENOSTR          125
#define ENOTCONN        126
#define ENOTRECOVERABLE 127
#define ENOTSOCK        128
#define ENOTSUP         129
#define EOPNOTSUPP      130
#define EOTHER          131
#define EOVERFLOW       132
#define EOWNERDEAD      133
#define EPROTO          134
#define EPROTONOSUPPORT 135
#define EPROTOTYPE      136
#define ETIME           137
#define ETIMEDOUT       138
#define ETXTBSY         139
#define EWOULDBLOCK     140

然而这些定于却对不少开源的代码编译造成了麻烦,特别是使用了WinSock2的代码。开源代码为了保持代码的兼容性一般吧errno定义到以WSA开头的WinSock2的errno定义上,而以WSA开头的errno定义和errno.h里面的errno定义完全不同。从而造成socket的程序获取到的错误号与于代码中用于判断的错误号完全不同。所以在大部分的源码都未提供vs2010支持的情况下最快的解决方法就是把errno.h里面新加入的错误号定义给注释掉。目前测试了curl 7.20.1 以及openssl 1.0.0均无问题。

更新注释掉以上部分代码可能会导致部分c++程序编译出错,请自行备份选择

此条目发表在分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据