summaryrefslogtreecommitdiffstats
path: root/net/socket
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-12 00:03:12 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-12 00:03:12 +0000
commit7b6afd0c466f6a8e87178008c65afc00fd84440e (patch)
tree9a98d8f4fbea3ed16fe398763da8767156e46362 /net/socket
parent5a224318c55d4e71fda84c6efdc732729ad73f59 (diff)
downloadchromium_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.cc87
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