| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "net/base/net_errors.h" |
| |
| #include <winsock2.h> |
| |
| #include "base/logging.h" |
| |
| namespace net { |
| |
| // Map winsock error to Chromium error. |
| Error MapSystemError(int os_error) { |
| // There are numerous Winsock error codes, but these are the ones we thus far |
| // find interesting. |
| switch (os_error) { |
| case WSAEWOULDBLOCK: |
| return ERR_IO_PENDING; |
| 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: |
| return ERR_CONNECTION_CLOSED; |
| case WSAEHOSTUNREACH: |
| case WSAENETUNREACH: |
| return ERR_ADDRESS_UNREACHABLE; |
| case WSAEADDRNOTAVAIL: |
| return ERR_ADDRESS_INVALID; |
| case WSAENOTCONN: |
| return ERR_SOCKET_NOT_CONNECTED; |
| case WSAEAFNOSUPPORT: |
| return ERR_ADDRESS_UNREACHABLE; |
| case ERROR_SUCCESS: |
| return OK; |
| default: |
| LOG(WARNING) << "Unknown error " << os_error |
| << " mapped to net::ERR_FAILED"; |
| return ERR_FAILED; |
| } |
| } |
| |
| } // namespace net |