| // Copyright 2014 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 "remoting/protocol/socket_util.h" |
| |
| #include "net/base/net_errors.h" |
| |
| namespace remoting { |
| |
| SocketErrorAction GetSocketErrorAction(int error) { |
| switch (error) { |
| // UDP is connectionless, so we may receive ICMP unreachable or reset errors |
| // for previous sends to different addresses. |
| case net::ERR_ADDRESS_UNREACHABLE: |
| case net::ERR_CONNECTION_RESET: |
| return SOCKET_ERROR_ACTION_RETRY; |
| |
| // Target address is invalid. The socket is still usable for different |
| // target addresses and the error can be ignored. |
| case net::ERR_ADDRESS_INVALID: |
| return SOCKET_ERROR_ACTION_IGNORE; |
| |
| // May be returned when the packet is blocked by local firewall (see |
| // https://code.google.com/p/webrtc/issues/detail?id=1207). The firewall may |
| // still allow us to send to other addresses, so ignore the error for this |
| // particular send. |
| case net::ERR_ACCESS_DENIED: |
| return SOCKET_ERROR_ACTION_IGNORE; |
| |
| // Indicates that the buffer in the network adapter is full, so drop this |
| // packet and assume the socket is still usable. |
| case net::ERR_OUT_OF_MEMORY: |
| return SOCKET_ERROR_ACTION_IGNORE; |
| |
| default: |
| return SOCKET_ERROR_ACTION_FAIL; |
| } |
| } |
| |
| |
| } // namespace remoting |