Weź ten prosty programstrerror z MinGW-W64
#include <stdio.h>
#include <string.h>
#include <errno.h>
int
main (void)
{
printf ("ERROR %d %s\n", ETIMEDOUT, strerror (ETIMEDOUT));
return 0;
}
Jeśli skompilować go z Cygwin GCC działa poprawnie
$ gcc a.c
$ ./a
ERROR 116 Connection timed out
Jeśli skompilować go z MinGW-W64 gcc nie daje właściwego komunikat o błędzie
$ i686-w64-mingw32-gcc a.c
$ ./a
ERROR 138 Unknown error
W jaki sposób uzyskać komunikat o błędzie MinGW-w64?
Kilka dodatkowych ciekawostek dotyczących "ETIMEDOUT": co najmniej jedna z moich instalacji MinGW definiuje go jako '10060' (taki sam jak" WSAETIMEDOUT ") zamiast" 138 ", jeśli nie jest jeszcze zdefiniowany. Myślę, że dzieje się tak dlatego, że dawny 'winsock.h' kiedyś to robił (ale już go nie ma). Boost zdefiniuje go jako '9938', jeśli' cerrno' kompilatora jeszcze go nie definiuje - co nie zaczęło się dziać w MSVC aż do VS2010. Powiedziałbym więc, że możesz uważać się za odrobinę szczęścia, nawet jeśli masz program do kompilacji. –
@MichaelBurr - WinSock pożyczył WSAETIMEDOUT (10060) z Berkeley Sockets zgodnie z http://www.sockets.com/err_lst1.htm#WSAETIMEDOUT –