Index: net/socket/tcp_client_socket_win.cc |
diff --git a/net/socket/tcp_client_socket_win.cc b/net/socket/tcp_client_socket_win.cc |
index 9e93bf0b76cf0f1f28b1cb61b1fba7b92e6fa5f5..6d733fa6fe5f468b65ccca9b77dba94b298e3bb0 100644 |
--- a/net/socket/tcp_client_socket_win.cc |
+++ b/net/socket/tcp_client_socket_win.cc |
@@ -22,97 +22,12 @@ |
#include "net/base/network_change_notifier.h" |
#include "net/base/sys_addrinfo.h" |
#include "net/base/winsock_init.h" |
+#include "net/base/winsock_util.h" |
namespace net { |
namespace { |
-// Prevent the compiler from optimizing away the arguments so they appear |
-// nicely on the stack in crash dumps. |
-#pragma warning (disable: 4748) |
-#pragma optimize( "", off ) |
- |
-// Pass the important values as function arguments so that they are available |
-// in crash dumps. |
-void CheckEventWait(WSAEVENT hEvent, DWORD wait_rv, DWORD expected) { |
- if (wait_rv != expected) { |
- DWORD err = ERROR_SUCCESS; |
- if (wait_rv == WAIT_FAILED) |
- err = GetLastError(); |
- CHECK(false); // Crash. |
- } |
-} |
- |
-#pragma optimize( "", on ) |
-#pragma warning (default: 4748) |
- |
-// Assert that the (manual-reset) event object is not signaled. |
-void AssertEventNotSignaled(WSAEVENT hEvent) { |
- DWORD wait_rv = WaitForSingleObject(hEvent, 0); |
- CheckEventWait(hEvent, wait_rv, WAIT_TIMEOUT); |
-} |
- |
-// If the (manual-reset) event object is signaled, resets it and returns true. |
-// Otherwise, does nothing and returns false. Called after a Winsock function |
-// succeeds synchronously |
-// |
-// Our testing shows that except in rare cases (when running inside QEMU), |
-// the event object is already signaled at this point, so we call this method |
-// to avoid a context switch in common cases. This is just a performance |
-// optimization. The code still works if this function simply returns false. |
-bool ResetEventIfSignaled(WSAEVENT hEvent) { |
- // TODO(wtc): Remove the CHECKs after enough testing. |
- DWORD wait_rv = WaitForSingleObject(hEvent, 0); |
- if (wait_rv == WAIT_TIMEOUT) |
- return false; // The event object is not signaled. |
- CheckEventWait(hEvent, wait_rv, WAIT_OBJECT_0); |
- BOOL ok = WSAResetEvent(hEvent); |
- CHECK(ok); |
- return true; |
-} |
- |
-//----------------------------------------------------------------------------- |
- |
-int MapWinsockError(int os_error) { |
- // There are numerous Winsock error codes, but these are the ones we thus far |
- // find interesting. |
- switch (os_error) { |
- case WSAEACCES: |
- return ERR_ACCESS_DENIED; |
- case WSAENETDOWN: |
- return ERR_INTERNET_DISCONNECTED; |
- case WSAETIMEDOUT: |
- return ERR_TIMED_OUT; |
- case WSAECONNRESET: |
- case WSAENETRESET: // Related to keep-alive |
- return ERR_CONNECTION_RESET; |
- case WSAECONNABORTED: |
- return ERR_CONNECTION_ABORTED; |
- case WSAECONNREFUSED: |
- return ERR_CONNECTION_REFUSED; |
- case WSA_IO_INCOMPLETE: |
- case WSAEDISCON: |
- // WSAEDISCON is returned by WSARecv or WSARecvFrom for message-oriented |
- // sockets (where a return value of zero means a zero-byte message) to |
- // indicate graceful connection shutdown. We should not ever see this |
- // error code for TCP sockets, which are byte stream oriented. |
- LOG(DFATAL) << "Unexpected error " << os_error |
- << " mapped to net::ERR_UNEXPECTED"; |
- return ERR_UNEXPECTED; |
- case WSAEHOSTUNREACH: |
- case WSAENETUNREACH: |
- return ERR_ADDRESS_UNREACHABLE; |
- case WSAEADDRNOTAVAIL: |
- return ERR_ADDRESS_INVALID; |
- case ERROR_SUCCESS: |
- return OK; |
- default: |
- LOG(WARNING) << "Unknown error " << os_error |
- << " mapped to net::ERR_FAILED"; |
- return ERR_FAILED; |
- } |
-} |
- |
int MapConnectError(int os_error) { |
switch (os_error) { |
// connect fails with WSAEACCES when Windows Firewall blocks the |