xref: /aosp_15_r20/external/cronet/net/socket/socket.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef NET_SOCKET_SOCKET_H_
6*6777b538SAndroid Build Coastguard Worker #define NET_SOCKET_SOCKET_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <stdint.h>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include <set>
11*6777b538SAndroid Build Coastguard Worker #include <string>
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker #include "net/base/completion_once_callback.h"
14*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h"
15*6777b538SAndroid Build Coastguard Worker #include "net/traffic_annotation/network_traffic_annotation.h"
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker namespace net {
18*6777b538SAndroid Build Coastguard Worker 
19*6777b538SAndroid Build Coastguard Worker class IOBuffer;
20*6777b538SAndroid Build Coastguard Worker 
21*6777b538SAndroid Build Coastguard Worker // Represents a read/write socket.
22*6777b538SAndroid Build Coastguard Worker class NET_EXPORT Socket {
23*6777b538SAndroid Build Coastguard Worker  public:
24*6777b538SAndroid Build Coastguard Worker   Socket();
25*6777b538SAndroid Build Coastguard Worker   virtual ~Socket();
26*6777b538SAndroid Build Coastguard Worker 
27*6777b538SAndroid Build Coastguard Worker   // Reads data, up to |buf_len| bytes, from the socket.  The number of bytes
28*6777b538SAndroid Build Coastguard Worker   // read is returned, or an error is returned upon failure.
29*6777b538SAndroid Build Coastguard Worker   // ERR_SOCKET_NOT_CONNECTED should be returned if the socket is not currently
30*6777b538SAndroid Build Coastguard Worker   // connected.  Zero is returned once to indicate end-of-file; the return value
31*6777b538SAndroid Build Coastguard Worker   // of subsequent calls is undefined, and may be OS dependent.  ERR_IO_PENDING
32*6777b538SAndroid Build Coastguard Worker   // is returned if the operation could not be completed synchronously, in which
33*6777b538SAndroid Build Coastguard Worker   // case the result will be passed to the callback when available. If the
34*6777b538SAndroid Build Coastguard Worker   // operation is not completed immediately, the socket acquires a reference to
35*6777b538SAndroid Build Coastguard Worker   // the provided buffer until the callback is invoked or the socket is
36*6777b538SAndroid Build Coastguard Worker   // closed.  If the socket is Disconnected before the read completes, the
37*6777b538SAndroid Build Coastguard Worker   // callback will not be invoked.
38*6777b538SAndroid Build Coastguard Worker   virtual int Read(IOBuffer* buf,
39*6777b538SAndroid Build Coastguard Worker                    int buf_len,
40*6777b538SAndroid Build Coastguard Worker                    CompletionOnceCallback callback) = 0;
41*6777b538SAndroid Build Coastguard Worker 
42*6777b538SAndroid Build Coastguard Worker   // Reads data, up to |buf_len| bytes, into |buf| without blocking. Default
43*6777b538SAndroid Build Coastguard Worker   // implementation returns ERR_READ_IF_READY_NOT_IMPLEMENTED. Caller should
44*6777b538SAndroid Build Coastguard Worker   // fall back to Read() if receives ERR_READ_IF_READY_NOT_IMPLEMENTED.
45*6777b538SAndroid Build Coastguard Worker   // Upon synchronous completion, returns the number of bytes read, or 0 on EOF,
46*6777b538SAndroid Build Coastguard Worker   // or an error code if an error happens. If read cannot be completed
47*6777b538SAndroid Build Coastguard Worker   // synchronously, returns ERR_IO_PENDING and does not hold on to |buf|.
48*6777b538SAndroid Build Coastguard Worker   // |callback| will be invoked with OK when data can be read, at which point,
49*6777b538SAndroid Build Coastguard Worker   // caller can call ReadIfReady() again. If an error occurs asynchronously,
50*6777b538SAndroid Build Coastguard Worker   // |callback| will be invoked with the error code.
51*6777b538SAndroid Build Coastguard Worker   virtual int ReadIfReady(IOBuffer* buf,
52*6777b538SAndroid Build Coastguard Worker                           int buf_len,
53*6777b538SAndroid Build Coastguard Worker                           CompletionOnceCallback callback);
54*6777b538SAndroid Build Coastguard Worker 
55*6777b538SAndroid Build Coastguard Worker   // Cancels a pending ReadIfReady(). May only be called when a ReadIfReady() is
56*6777b538SAndroid Build Coastguard Worker   // pending. Returns net::OK or an error code. ERR_READ_IF_READY_NOT_SUPPORTED
57*6777b538SAndroid Build Coastguard Worker   // is returned if ReadIfReady() is not supported.
58*6777b538SAndroid Build Coastguard Worker   virtual int CancelReadIfReady();
59*6777b538SAndroid Build Coastguard Worker 
60*6777b538SAndroid Build Coastguard Worker   // Writes data, up to |buf_len| bytes, to the socket.  Note: data may be
61*6777b538SAndroid Build Coastguard Worker   // written partially.  The number of bytes written is returned, or an error
62*6777b538SAndroid Build Coastguard Worker   // is returned upon failure.  ERR_SOCKET_NOT_CONNECTED should be returned if
63*6777b538SAndroid Build Coastguard Worker   // the socket is not currently connected.  The return value when the
64*6777b538SAndroid Build Coastguard Worker   // connection is closed is undefined, and may be OS dependent.  ERR_IO_PENDING
65*6777b538SAndroid Build Coastguard Worker   // is returned if the operation could not be completed synchronously, in which
66*6777b538SAndroid Build Coastguard Worker   // case the result will be passed to the callback when available.  If the
67*6777b538SAndroid Build Coastguard Worker   // operation is not completed immediately, the socket acquires a reference to
68*6777b538SAndroid Build Coastguard Worker   // the provided buffer until the callback is invoked or the socket is
69*6777b538SAndroid Build Coastguard Worker   // closed.  Implementations of this method should not modify the contents
70*6777b538SAndroid Build Coastguard Worker   // of the actual buffer that is written to the socket.  If the socket is
71*6777b538SAndroid Build Coastguard Worker   // Disconnected before the write completes, the callback will not be invoked.
72*6777b538SAndroid Build Coastguard Worker   // |traffic_annotation| provides the required description for auditing. Please
73*6777b538SAndroid Build Coastguard Worker   // refer to //docs/network_traffic_annotations.md for more details.
74*6777b538SAndroid Build Coastguard Worker   virtual int Write(IOBuffer* buf,
75*6777b538SAndroid Build Coastguard Worker                     int buf_len,
76*6777b538SAndroid Build Coastguard Worker                     CompletionOnceCallback callback,
77*6777b538SAndroid Build Coastguard Worker                     const NetworkTrafficAnnotationTag& traffic_annotation) = 0;
78*6777b538SAndroid Build Coastguard Worker 
79*6777b538SAndroid Build Coastguard Worker   // Set the receive buffer size (in bytes) for the socket.
80*6777b538SAndroid Build Coastguard Worker   // Note: changing this value can affect the TCP window size on some platforms.
81*6777b538SAndroid Build Coastguard Worker   // Returns a net error code.
82*6777b538SAndroid Build Coastguard Worker   virtual int SetReceiveBufferSize(int32_t size) = 0;
83*6777b538SAndroid Build Coastguard Worker 
84*6777b538SAndroid Build Coastguard Worker   // Set the send buffer size (in bytes) for the socket.
85*6777b538SAndroid Build Coastguard Worker   // Note: changing this value can affect the TCP window size on some platforms.
86*6777b538SAndroid Build Coastguard Worker   // Returns a net error code.
87*6777b538SAndroid Build Coastguard Worker   virtual int SetSendBufferSize(int32_t size) = 0;
88*6777b538SAndroid Build Coastguard Worker 
89*6777b538SAndroid Build Coastguard Worker   // DNS aliases must be stored in sockets in case of socket reuse.
90*6777b538SAndroid Build Coastguard Worker   // Sets the field storing the aliases. Empty if using a proxy.
91*6777b538SAndroid Build Coastguard Worker   virtual void SetDnsAliases(std::set<std::string> aliases);
92*6777b538SAndroid Build Coastguard Worker 
93*6777b538SAndroid Build Coastguard Worker   // Retrieves any DNS aliases for the socket's remote endpoint.
94*6777b538SAndroid Build Coastguard Worker   virtual const std::set<std::string>& GetDnsAliases() const;
95*6777b538SAndroid Build Coastguard Worker 
96*6777b538SAndroid Build Coastguard Worker  protected:
97*6777b538SAndroid Build Coastguard Worker   std::set<std::string> dns_aliases_;
98*6777b538SAndroid Build Coastguard Worker };
99*6777b538SAndroid Build Coastguard Worker 
100*6777b538SAndroid Build Coastguard Worker }  // namespace net
101*6777b538SAndroid Build Coastguard Worker 
102*6777b538SAndroid Build Coastguard Worker #endif  // NET_SOCKET_SOCKET_H_
103