// 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