GRPC Core  18.0.0
endpoint.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #ifndef GRPC_CORE_LIB_IOMGR_ENDPOINT_H
20 #define GRPC_CORE_LIB_IOMGR_ENDPOINT_H
21 
23 
24 #include "absl/strings/string_view.h"
25 
26 #include <grpc/slice.h>
27 #include <grpc/slice_buffer.h>
28 #include <grpc/support/time.h>
32 
33 /* An endpoint caps a streaming channel between two communicating processes.
34  Examples may be: a tcp socket, <stdin+stdout>, or some shared memory. */
35 
36 typedef struct grpc_endpoint grpc_endpoint;
38 
40  void (*read)(grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb,
41  bool urgent);
43  void* arg);
44  void (*add_to_pollset)(grpc_endpoint* ep, grpc_pollset* pollset);
48  void (*destroy)(grpc_endpoint* ep);
49  grpc_resource_user* (*get_resource_user)(grpc_endpoint* ep);
50  absl::string_view (*get_peer)(grpc_endpoint* ep);
51  absl::string_view (*get_local_address)(grpc_endpoint* ep);
52  int (*get_fd)(grpc_endpoint* ep);
54 };
55 
56 /* When data is available on the connection, calls the callback with slices.
57  Callback success indicates that the endpoint can accept more reads, failure
58  indicates the endpoint is closed.
59  Valid slices may be placed into \a slices even when the callback is
60  invoked with error != GRPC_ERROR_NONE. */
62  grpc_closure* cb, bool urgent);
63 
64 absl::string_view grpc_endpoint_get_peer(grpc_endpoint* ep);
65 
66 absl::string_view grpc_endpoint_get_local_address(grpc_endpoint* ep);
67 
68 /* Get the file descriptor used by \a ep. Return -1 if \a ep is not using an fd.
69  */
71 
72 /* Write slices out to the socket.
73 
74  If the connection is ready for more data after the end of the call, it
75  returns GRPC_ENDPOINT_DONE.
76  Otherwise it returns GRPC_ENDPOINT_PENDING and calls cb when the
77  connection is ready for more data.
78  \a slices may be mutated at will by the endpoint until cb is called.
79  No guarantee is made to the content of slices after a write EXCEPT that
80  it is a valid slice buffer.
81  \a arg is platform specific. It is currently only used by TCP on linux
82  platforms as an argument that would be forwarded to the timestamps callback.
83  */
85  grpc_closure* cb, void* arg);
86 
87 /* Causes any pending and future read/write callbacks to run immediately with
88  success==0 */
91 
92 /* Add an endpoint to a pollset or pollset_set, so that when the pollset is
93  polled, events from this endpoint are considered */
96  grpc_pollset_set* pollset_set);
97 
98 /* Delete an endpoint from a pollset_set */
100  grpc_pollset_set* pollset_set);
101 
103 
105 
108 };
109 
110 #endif /* GRPC_CORE_LIB_IOMGR_ENDPOINT_H */
void grpc_endpoint_delete_from_pollset_set(grpc_endpoint *ep, grpc_pollset_set *pollset_set)
Definition: endpoint.cc:44
absl::string_view grpc_endpoint_get_local_address(grpc_endpoint *ep)
Definition: endpoint.cc:59
int grpc_endpoint_get_fd(grpc_endpoint *ep)
Definition: endpoint.cc:63
bool grpc_endpoint_can_track_err(grpc_endpoint *ep)
Definition: endpoint.cc:69
void grpc_endpoint_destroy(grpc_endpoint *ep)
Definition: endpoint.cc:53
void grpc_endpoint_write(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, void *arg)
Definition: endpoint.cc:30
void grpc_endpoint_add_to_pollset_set(grpc_endpoint *ep, grpc_pollset_set *pollset_set)
Definition: endpoint.cc:39
void grpc_endpoint_read(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, bool urgent)
Definition: endpoint.cc:25
absl::string_view grpc_endpoint_get_peer(grpc_endpoint *ep)
Definition: endpoint.cc:55
void grpc_endpoint_shutdown(grpc_endpoint *ep, grpc_error_handle why)
Definition: endpoint.cc:49
grpc_resource_user * grpc_endpoint_get_resource_user(grpc_endpoint *ep)
Definition: endpoint.cc:65
void grpc_endpoint_add_to_pollset(grpc_endpoint *ep, grpc_pollset *pollset)
Definition: endpoint.cc:35
struct grpc_pollset_set grpc_pollset_set
Definition: pollset_set.h:31
A closure over a grpc_iomgr_cb_func.
Definition: closure.h:56
Definition: endpoint.h:39
void(* add_to_pollset_set)(grpc_endpoint *ep, grpc_pollset_set *pollset)
Definition: endpoint.h:45
absl::string_view(* get_local_address)(grpc_endpoint *ep)
Definition: endpoint.h:51
void(* add_to_pollset)(grpc_endpoint *ep, grpc_pollset *pollset)
Definition: endpoint.h:44
void(* delete_from_pollset_set)(grpc_endpoint *ep, grpc_pollset_set *pollset)
Definition: endpoint.h:46
void(* destroy)(grpc_endpoint *ep)
Definition: endpoint.h:48
void(* read)(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, bool urgent)
Definition: endpoint.h:40
int(* get_fd)(grpc_endpoint *ep)
Definition: endpoint.h:52
absl::string_view(* get_peer)(grpc_endpoint *ep)
Definition: endpoint.h:50
void(* write)(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, void *arg)
Definition: endpoint.h:42
bool(* can_track_err)(grpc_endpoint *ep)
Definition: endpoint.h:53
void(* shutdown)(grpc_endpoint *ep, grpc_error_handle why)
Definition: endpoint.h:47
Definition: endpoint.h:106
const grpc_endpoint_vtable * vtable
Definition: endpoint.h:107
Definition: error_internal.h:41
Definition: pollset_custom.cc:40
Definition: resource_quota.cc:65
Represents an expandable array of slices, to be interpreted as a single item.
Definition: slice.h:78