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