Home | History | Annotate | Download | only in protocol
      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 
     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