Index: src/exceptions/OFException.h ================================================================== --- src/exceptions/OFException.h +++ src/exceptions/OFException.h @@ -21,47 +21,115 @@ @class OFMutableArray; #define OF_BACKTRACE_SIZE 32 #if defined(_WIN32) && defined(OF_HAVE_SOCKETS) -# define EADDRINUSE WSAEADDRINUSE -# define EADDRNOTAVAIL WSAEADDRNOTAVAIL -# define EAFNOSUPPORT WSAEAFNOSUPPORT -# define EALREADY WSAEALREADY -# define ECONNABORTED WSAECONNABORTED -# define ECONNABORTED WSAECONNABORTED -# define ECONNREFUSED WSAECONNREFUSED -# define ECONNRESET WSAECONNRESET -# define ECONNRESET WSAECONNRESET -# define EDESTADDRREQ WSAEDESTADDRREQ -# define EDQUOT WSAEDQUOT -# define EHOSTDOWN WSAEHOSTDOWN -# define EHOSTUNREACH WSAEHOSTUNREACH -# define EINPROGRESS WSAEINPROGRESS -# define EISCONN WSAEISCONN -# define ELOOP WSAELOOP -# define EMSGSIZE WSAEMSGSIZE -# define ENETDOWN WSAENETDOWN -# define ENETRESET WSAENETRESET -# define ENETUNREACH WSAENETUNREACH -# define ENOBUFS WSAENOBUFS -# define ENOPROTOOPT WSAENOPROTOOPT -# define ENOTCONN WSAENOTCONN -# define ENOTSOCK WSAENOTSOCK -# define EOPNOTSUPP WSAEOPNOTSUPP -# define EPFNOSUPPORT WSAEPFNOSUPPORT -# define EPROCLIM WSAEPROCLIM -# define EPROTONOSUPPORT WSAEPROTONOSUPPORT -# define EPROTOTYPE WSAEPROTOTYPE -# define EREMOTE WSAEREMOTE -# define ESHUTDOWN WSAESHUTDOWN -# define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT -# define ESTALE WSAESTALE -# define ETIMEDOUT WSAETIMEDOUT -# define ETOOMANYREFS WSAETOOMANYREFS -# define EUSERS WSAEUSERS -# define EWOULDBLOCK WSAEWOULDBLOCK +# ifndef EADDRINUSE +# define EADDRINUSE WSAEADDRINUSE +# endif +# ifndef EADDRNOTAVAIL +# define EADDRNOTAVAIL WSAEADDRNOTAVAIL +# endif +# ifndef EAFNOSUPPORT +# define EAFNOSUPPORT WSAEAFNOSUPPORT +# endif +# ifndef EALREADY +# define EALREADY WSAEALREADY +# endif +# ifndef ECONNABORTED +# define ECONNABORTED WSAECONNABORTED +# endif +# ifndef ECONNREFUSED +# define ECONNREFUSED WSAECONNREFUSED +# endif +# ifndef ECONNRESET +# define ECONNRESET WSAECONNRESET +# endif +# ifndef EDESTADDRREQ +# define EDESTADDRREQ WSAEDESTADDRREQ +# endif +# ifndef EDQUOT +# define EDQUOT WSAEDQUOT +# endif +# ifndef EHOSTDOWN +# define EHOSTDOWN WSAEHOSTDOWN +# endif +# ifndef EHOSTUNREACH +# define EHOSTUNREACH WSAEHOSTUNREACH +# endif +# ifndef EINPROGRESS +# define EINPROGRESS WSAEINPROGRESS +# endif +# ifndef EISCONN +# define EISCONN WSAEISCONN +# endif +# ifndef ELOOP +# define ELOOP WSAELOOP +# endif +# ifndef EMSGSIZE +# define EMSGSIZE WSAEMSGSIZE +# endif +# ifndef ENETDOWN +# define ENETDOWN WSAENETDOWN +# endif +# ifndef ENETRESET +# define ENETRESET WSAENETRESET +# endif +# ifndef ENETUNREACH +# define ENETUNREACH WSAENETUNREACH +# endif +# ifndef ENOBUFS +# define ENOBUFS WSAENOBUFS +# endif +# ifndef ENOPROTOOPT +# define ENOPROTOOPT WSAENOPROTOOPT +# endif +# ifndef ENOTCONN +# define ENOTCONN WSAENOTCONN +# endif +# ifndef ENOTSOCK +# define ENOTSOCK WSAENOTSOCK +# endif +# ifndef EOPNOTSUPP +# define EOPNOTSUPP WSAEOPNOTSUPP +# endif +# ifndef EPFNOSUPPORT +# define EPFNOSUPPORT WSAEPFNOSUPPORT +# endif +# ifndef EPROCLIM +# define EPROCLIM WSAEPROCLIM +# endif +# ifndef EPROTONOSUPPORT +# define EPROTONOSUPPORT WSAEPROTONOSUPPORT +# endif +# ifndef EPROTOTYPE +# define EPROTOTYPE WSAEPROTOTYPE +# endif +# ifndef EREMOTE +# define EREMOTE WSAEREMOTE +# endif +# ifndef ESHUTDOWN +# define ESHUTDOWN WSAESHUTDOWN +# endif +# ifndef ESOCKTNOSUPPORT +# define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT +# endif +# ifndef ESTALE +# define ESTALE WSAESTALE +# endif +# ifndef ETIMEDOUT +# define ETIMEDOUT WSAETIMEDOUT +# endif +# ifndef ETOOMANYREFS +# define ETOOMANYREFS WSAETOOMANYREFS +# endif +# ifndef EUSERS +# define EUSERS WSAEUSERS +# endif +# ifndef EWOULDBLOCK +# define EWOULDBLOCK WSAEWOULDBLOCK +# endif extern int of_wsaerr_to_errno(int); #endif /*! * @brief The base class for all exceptions in ObjFW Index: src/exceptions/OFException.m ================================================================== --- src/exceptions/OFException.m +++ src/exceptions/OFException.m @@ -92,26 +92,94 @@ of_wsaerr_to_errno(int wsaerr) { switch (wsaerr) { case WSAEACCES: return EACCES; + case WSAEADDRINUSE: + return EADDRINUSE; + case WSAEADDRNOTAVAIL: + return EADDRNOTAVAIL; + case WSAEAFNOSUPPORT: + return EAFNOSUPPORT; + case WSAEALREADY: + return EALREADY; case WSAEBADF: return EBADF; + case WSAECONNABORTED: + return ECONNABORTED; + case WSAECONNREFUSED: + return ECONNREFUSED; + case WSAECONNRESET: + return ECONNRESET; + case WSAEDESTADDRREQ: + return EDESTADDRREQ; case WSAEDISCON: return EPIPE; + case WSAEDQUOT: + return EDQUOT; case WSAEFAULT: return EFAULT; + case WSAEHOSTDOWN: + return EHOSTDOWN; + case WSAEHOSTUNREACH: + return EHOSTUNREACH; + case WSAEINPROGRESS: + return EINPROGRESS; case WSAEINTR: return EINTR; case WSAEINVAL: return EINVAL; + case WSAEISCONN: + return EISCONN; + case WSAELOOP: + return ELOOP; + case WSAEMSGSIZE: + return EMSGSIZE; case WSAENAMETOOLONG: return ENAMETOOLONG; + case WSAENETDOWN: + return ENETDOWN; + case WSAENETRESET: + return ENETRESET; + case WSAENETUNREACH: + return ENETUNREACH; + case WSAENOBUFS: + return ENOBUFS; + case WSAENOPROTOOPT: + return ENOPROTOOPT; + case WSAENOTCONN: + return ENOTCONN; case WSAENOTEMPTY: return ENOTEMPTY; + case WSAENOTSOCK: + return ENOTSOCK; + case WSAEOPNOTSUPP: + return EOPNOTSUPP; + case WSAEPFNOSUPPORT: + return EPFNOSUPPORT; + case WSAEPROCLIM: + return EPROCLIM; + case WSAEPROTONOSUPPORT: + return EPROTONOSUPPORT; + case WSAEPROTOTYPE: + return EPROTOTYPE; + case WSAEREMOTE: + return EREMOTE; + case WSAESHUTDOWN: + return ESHUTDOWN; + case WSAESOCKTNOSUPPORT: + return ESOCKTNOSUPPORT; + case WSAESTALE: + return ESTALE; + case WSAETIMEDOUT: + return ETIMEDOUT; + case WSAETOOMANYREFS: + return ETOOMANYREFS; + case WSAEUSERS: + return EUSERS; case WSAEWOULDBLOCK: - return EAGAIN; + return EWOULDBLOCK; default: return wsaerr; } } #endif Index: src/socket.h ================================================================== --- src/socket.h +++ src/socket.h @@ -25,10 +25,11 @@ #ifdef OF_HAVE_SYS_SOCKET_H # include #endif #ifdef _WIN32 +# include # include # include #endif #ifdef __wii__ Index: src/threading.h ================================================================== --- src/threading.h +++ src/threading.h @@ -32,10 +32,18 @@ typedef pthread_t of_thread_t; typedef pthread_key_t of_tlskey_t; typedef pthread_mutex_t of_mutex_t; typedef pthread_cond_t of_condition_t; #elif defined(_WIN32) +/* + * winsock2.h needs to be included before windows.h. Not including it here + * would make it impossible to use sockets after threading.h has been + * imported. + */ +# ifdef OF_HAVE_SOCKETS +# include +# endif # include typedef HANDLE of_thread_t; typedef DWORD of_tlskey_t; typedef CRITICAL_SECTION of_mutex_t; typedef struct {