@@ -2672,6 +2672,91 @@ static inline int winsock_return(int ret)
2672
2672
2673
2673
#define WINSOCK_RETURN (x ) do { return winsock_return(x); } while (0)
2674
2674
2675
+ #undef strerror
2676
+ char * mingw_strerror (int errnum )
2677
+ {
2678
+ static char buf [41 ] = "" ;
2679
+ switch (errnum ) {
2680
+ case EWOULDBLOCK :
2681
+ xsnprintf (buf , 41 , "%s" , "Operation would block" );
2682
+ break ;
2683
+ case EINPROGRESS :
2684
+ xsnprintf (buf , 41 , "%s" , "Operation now in progress" );
2685
+ break ;
2686
+ case EALREADY :
2687
+ xsnprintf (buf , 41 , "%s" , "Operation already in progress" );
2688
+ break ;
2689
+ case ENOTSOCK :
2690
+ xsnprintf (buf , 41 , "%s" , "Socket operation on non-socket" );
2691
+ break ;
2692
+ case EDESTADDRREQ :
2693
+ xsnprintf (buf , 41 , "%s" , "Destination address required" );
2694
+ break ;
2695
+ case EMSGSIZE :
2696
+ xsnprintf (buf , 41 , "%s" , "Message too long" );
2697
+ break ;
2698
+ case EPROTOTYPE :
2699
+ xsnprintf (buf , 41 , "%s" , "Protocol wrong type for socket" );
2700
+ break ;
2701
+ case ENOPROTOOPT :
2702
+ xsnprintf (buf , 41 , "%s" , "Protocol not available" );
2703
+ break ;
2704
+ case EPROTONOSUPPORT :
2705
+ xsnprintf (buf , 41 , "%s" , "Protocol not supported" );
2706
+ break ;
2707
+ case EOPNOTSUPP :
2708
+ xsnprintf (buf , 41 , "%s" , "Operation not supported" );
2709
+ break ;
2710
+ case EAFNOSUPPORT :
2711
+ xsnprintf (buf , 41 , "%s" , "Address family not supported by protocol" );
2712
+ break ;
2713
+ case EADDRINUSE :
2714
+ xsnprintf (buf , 41 , "%s" , "Address already in use" );
2715
+ break ;
2716
+ case EADDRNOTAVAIL :
2717
+ xsnprintf (buf , 41 , "%s" , "Cannot assign requested address" );
2718
+ break ;
2719
+ case ENETDOWN :
2720
+ xsnprintf (buf , 41 , "%s" , "Network is down" );
2721
+ break ;
2722
+ case ENETUNREACH :
2723
+ xsnprintf (buf , 41 , "%s" , "Network is unreachable" );
2724
+ break ;
2725
+ case ENETRESET :
2726
+ xsnprintf (buf , 41 , "%s" , "Network dropped connection on reset" );
2727
+ break ;
2728
+ case ECONNABORTED :
2729
+ xsnprintf (buf , 41 , "%s" , "Software caused connection abort" );
2730
+ break ;
2731
+ case ECONNRESET :
2732
+ xsnprintf (buf , 41 , "%s" , "Connection reset by peer" );
2733
+ break ;
2734
+ case ENOBUFS :
2735
+ xsnprintf (buf , 41 , "%s" , "No buffer space available" );
2736
+ break ;
2737
+ case EISCONN :
2738
+ xsnprintf (buf , 41 , "%s" , "Transport endpoint is already connected" );
2739
+ break ;
2740
+ case ENOTCONN :
2741
+ xsnprintf (buf , 41 , "%s" , "Transport endpoint is not connected" );
2742
+ break ;
2743
+ case ETIMEDOUT :
2744
+ xsnprintf (buf , 41 , "%s" , "Connection timed out" );
2745
+ break ;
2746
+ case ECONNREFUSED :
2747
+ xsnprintf (buf , 41 , "%s" , "Connection refused" );
2748
+ break ;
2749
+ case ELOOP :
2750
+ xsnprintf (buf , 41 , "%s" , "Too many levels of symbolic links" );
2751
+ break ;
2752
+ case EHOSTUNREACH :
2753
+ xsnprintf (buf , 41 , "%s" , "No route to host" );
2754
+ break ;
2755
+ default : return strerror (errnum );
2756
+ }
2757
+ return buf ;
2758
+ }
2759
+
2675
2760
#undef gethostname
2676
2761
int mingw_gethostname (char * name , int namelen )
2677
2762
{
@@ -2709,15 +2794,6 @@ int mingw_socket(int domain, int type, int protocol)
2709
2794
ensure_socket_initialization ();
2710
2795
s = WSASocket (domain , type , protocol , NULL , 0 , 0 );
2711
2796
if (s == INVALID_SOCKET ) {
2712
- /*
2713
- * WSAGetLastError() values are regular BSD error codes
2714
- * biased by WSABASEERR.
2715
- * However, strerror() does not know about networking
2716
- * specific errors, which are values beginning at 38 or so.
2717
- * Therefore, we choose to leave the biased error code
2718
- * in errno so that _if_ someone looks up the code somewhere,
2719
- * then it is at least the number that are usually listed.
2720
- */
2721
2797
set_wsa_errno ();
2722
2798
return -1 ;
2723
2799
}
0 commit comments