diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-12 00:03:12 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-12 00:03:12 +0000 |
commit | 7b6afd0c466f6a8e87178008c65afc00fd84440e (patch) | |
tree | 9a98d8f4fbea3ed16fe398763da8767156e46362 /net/socket | |
parent | 5a224318c55d4e71fda84c6efdc732729ad73f59 (diff) | |
download | chromium_src-7b6afd0c466f6a8e87178008c65afc00fd84440e.zip chromium_src-7b6afd0c466f6a8e87178008c65afc00fd84440e.tar.gz chromium_src-7b6afd0c466f6a8e87178008c65afc00fd84440e.tar.bz2 |
UDP sockets implementation for windows.
BUG=None
TEST=Unittests
Review URL: http://codereview.chromium.org/6658027
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@77895 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket')
-rw-r--r-- | net/socket/tcp_client_socket_win.cc | 87 |
1 files changed, 1 insertions, 86 deletions
diff --git a/net/socket/tcp_client_socket_win.cc b/net/socket/tcp_client_socket_win.cc index 9e93bf0..6d733fa 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 |