| // 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 <errno.h> |
| |
| #include "base/logging.h" |
| |
| namespace net { |
| |
| Error MapSystemError(int os_error) { |
| // There are numerous posix error codes, but these are the ones we thus far |
| // find interesting. |
| switch (os_error) { |
| case EAGAIN: |
| #if EWOULDBLOCK != EAGAIN |
| case EWOULDBLOCK: |
| #endif |
| return ERR_IO_PENDING; |
| case EACCES: |
| return ERR_ACCESS_DENIED; |
| case ENETDOWN: |
| return ERR_INTERNET_DISCONNECTED; |
| case ETIMEDOUT: |
| return ERR_TIMED_OUT; |
| case ECONNRESET: |
| case ENETRESET: // Related to keep-alive |
| case EPIPE: |
| return ERR_CONNECTION_RESET; |
| case ECONNABORTED: |
| return ERR_CONNECTION_ABORTED; |
| case ECONNREFUSED: |
| return ERR_CONNECTION_REFUSED; |
| case EHOSTUNREACH: |
| case EHOSTDOWN: |
| case ENETUNREACH: |
| return ERR_ADDRESS_UNREACHABLE; |
| case EADDRNOTAVAIL: |
| return ERR_ADDRESS_INVALID; |
| case EMSGSIZE: |
| return ERR_MSG_TOO_BIG; |
| case ENOTCONN: |
| return ERR_SOCKET_NOT_CONNECTED; |
| case 0: |
| return OK; |
| default: |
| LOG(WARNING) << "Unknown error " << os_error |
| << " mapped to net::ERR_FAILED"; |
| return ERR_FAILED; |
| } |
| } |
| |
| } // namespace net |