• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "remoting/protocol/socket_util.h"
6 
7 #include "net/base/net_errors.h"
8 
9 namespace remoting {
10 
GetSocketErrorAction(int error)11 SocketErrorAction GetSocketErrorAction(int error) {
12   switch (error) {
13     // UDP is connectionless, so we may receive ICMP unreachable or reset errors
14     // for previous sends to different addresses.
15     case net::ERR_ADDRESS_UNREACHABLE:
16     case net::ERR_CONNECTION_RESET:
17       return SOCKET_ERROR_ACTION_RETRY;
18 
19     // Target address is invalid. The socket is still usable for different
20     // target addresses and the error can be ignored.
21     case net::ERR_ADDRESS_INVALID:
22       return SOCKET_ERROR_ACTION_IGNORE;
23 
24     // May be returned when the packet is blocked by local firewall (see
25     // https://code.google.com/p/webrtc/issues/detail?id=1207). The firewall may
26     // still allow us to send to other addresses, so ignore the error for this
27     // particular send.
28     case net::ERR_ACCESS_DENIED:
29       return SOCKET_ERROR_ACTION_IGNORE;
30 
31     // Indicates that the buffer in the network adapter is full, so drop this
32     // packet and assume the socket is still usable.
33     case net::ERR_OUT_OF_MEMORY:
34       return SOCKET_ERROR_ACTION_IGNORE;
35 
36     default:
37       return SOCKET_ERROR_ACTION_FAIL;
38   }
39 }
40 
41 
42 }  // namespace remoting
43