5
如果您有Cygwin的GCC编译它把这个简单的程序字符串错误使用MinGW-W64
#include <stdio.h>
#include <string.h>
#include <errno.h>
int
main (void)
{
printf ("ERROR %d %s\n", ETIMEDOUT, strerror (ETIMEDOUT));
return 0;
}
运行良好
$ gcc a.c
$ ./a
ERROR 116 Connection timed out
如果你使用MinGW-W64 GCC编译它,它不会给适当的错误信息
$ i686-w64-mingw32-gcc a.c
$ ./a
ERROR 138 Unknown error
如何让MinGW-w64发出正确的错误信息?
关于'ETIMEDOUT'的一些额外花絮:至少我的MinGW安装中有一个将它定义为'10060'(与'WSAETIMEDOUT'相同),而不是'138',如果它尚未定义的话。我认为这是因为传统的'winsock.h'曾经这样做(但现在不再)。如果编译器的“cerrno”尚未定义它,Boost会将其定义为“9938” - 直到VS2010才开始在MSVC中开始。所以,我想说你甚至可以认为自己有点幸运,甚至可以让程序编译。 –
@MichaelBurr - WinSock根据http://www.sockets.com/err_lst1.htm#WSAETIMEDOUT从伯克利套接字中借用了WSAETIMEDOUT(10060) –