From 870debcf6d9a0d841044c3e870b9cbf02ca19cdb Mon Sep 17 00:00:00 2001 From: shefty Date: Wed, 30 Sep 2009 22:37:14 +0000 Subject: [PATCH] winverbs: map WSA error codes to winverbs status values Intel MPI bases decisions on the correct status value being returned and mapped correctly through uDAPL. Signed-off-by: Sean Hefty git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@2482 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- core/winverbs/user/wv_base.h | 3 ++- core/winverbs/user/wv_ep.cpp | 4 ++-- core/winverbs/user/wv_main.cpp | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/core/winverbs/user/wv_base.h b/core/winverbs/user/wv_base.h index 592fc18a..f37cf96b 100644 --- a/core/winverbs/user/wv_base.h +++ b/core/winverbs/user/wv_base.h @@ -40,6 +40,7 @@ #include HRESULT WvConvertIbStatus(ib_api_status_t status); +HRESULT WvConvertWSAStatus(int status); HRESULT WvGetUserVerbs(HMODULE hLib, uvp_interface_t *pVerbs); @@ -82,4 +83,4 @@ protected: } #endif (_WIN64) -#endif // _WV_BASE_H_ \ No newline at end of file +#endif // _WV_BASE_H_ diff --git a/core/winverbs/user/wv_ep.cpp b/core/winverbs/user/wv_ep.cpp index 31a3dfec..28d2f7db 100644 --- a/core/winverbs/user/wv_ep.cpp +++ b/core/winverbs/user/wv_ep.cpp @@ -192,7 +192,7 @@ BindAddress(SOCKADDR* pAddress) m_Socket = socket(pAddress->sa_family, SOCK_STREAM, IPPROTO_TCP); if (m_Socket == INVALID_SOCKET) { - return WSAGetLastError(); + return WvConvertWSAStatus(WSAGetLastError()); } hr = bind(m_Socket, pAddress, bytes); @@ -216,7 +216,7 @@ BindAddress(SOCKADDR* pAddress) return WV_SUCCESS; get_err: - hr = WSAGetLastError(); + hr = WvConvertWSAStatus(WSAGetLastError()); err: closesocket(m_Socket); m_Socket = INVALID_SOCKET; diff --git a/core/winverbs/user/wv_main.cpp b/core/winverbs/user/wv_main.cpp index 361d04b4..32d1aaee 100644 --- a/core/winverbs/user/wv_main.cpp +++ b/core/winverbs/user/wv_main.cpp @@ -131,3 +131,22 @@ HRESULT WvConvertIbStatus(ib_api_status_t status) default: return WV_UNKNOWN_ERROR; } } + +HRESULT WvConvertWSAStatus(int status) +{ + switch (status) { + case 0: return WV_SUCCESS; + case WSAEADDRINUSE: return WV_ADDRESS_ALREADY_EXISTS; + case WSAEADDRNOTAVAIL: return WV_INVALID_ADDRESS; + case WSAENETDOWN: return WV_HOST_UNREACHABLE; + case WSAENETUNREACH: return WV_HOST_UNREACHABLE; + case WSAECONNABORTED: return WV_CONNECTION_ABORTED; + case WSAEISCONN: return WV_CONNECTION_ACTIVE; + case WSAENOTCONN: return WV_CONNECTION_INVALID; + case WSAETIMEDOUT: return WV_IO_TIMEOUT; + case WSAECONNREFUSED: return WV_CONNECTION_REFUSED; + case WSAEHOSTUNREACH: return WV_HOST_UNREACHABLE; + case WSAEACCES: return WV_ADDRESS_ALREADY_EXISTS; + default: return WV_UNKNOWN_ERROR; + } +} \ No newline at end of file -- 2.17.1