socket_factory_posix.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2017 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 
20 
22 
23 #ifdef GRPC_POSIX_SOCKET_SOCKET_FACTORY
24 
26 #include <grpc/support/sync.h>
27 
31 
34  factory->vtable = vtable;
35  gpr_ref_init(&factory->refcount, 1);
36 }
37 
38 int grpc_socket_factory_socket(grpc_socket_factory* factory, int domain,
39  int type, int protocol) {
40  return factory->vtable->socket(factory, domain, type, protocol);
41 }
42 
43 int grpc_socket_factory_bind(grpc_socket_factory* factory, int sockfd,
44  const grpc_resolved_address* addr) {
45  return factory->vtable->bind(factory, sockfd, addr);
46 }
47 
50  int c = grpc_core::QsortCompare(a, b);
51  if (c != 0) {
52  grpc_socket_factory* sma = a;
53  grpc_socket_factory* smb = b;
54  c = grpc_core::QsortCompare(sma->vtable, smb->vtable);
55  if (c == 0) {
56  c = sma->vtable->compare(sma, smb);
57  }
58  }
59  return c;
60 }
61 
63  gpr_ref(&factory->refcount);
64  return factory;
65 }
66 
68  if (gpr_unref(&factory->refcount)) {
69  factory->vtable->destroy(factory);
70  }
71 }
72 
73 static void* socket_factory_arg_copy(void* p) {
74  return grpc_socket_factory_ref(static_cast<grpc_socket_factory*>(p));
75 }
76 
77 static void socket_factory_arg_destroy(void* p) {
79 }
80 
81 static int socket_factory_cmp(void* a, void* b) {
83  static_cast<grpc_socket_factory*>(b));
84 }
85 
86 static const grpc_arg_pointer_vtable socket_factory_arg_vtable = {
87  socket_factory_arg_copy, socket_factory_arg_destroy, socket_factory_cmp};
88 
91  const_cast<char*>(GRPC_ARG_SOCKET_FACTORY), factory,
92  &socket_factory_arg_vtable);
93 }
94 
95 #endif
grpc_arg
Definition: grpc_types.h:103
grpc_socket_factory
Definition: socket_factory_posix.h:43
grpc_socket_factory_init
void grpc_socket_factory_init(grpc_socket_factory *factory, const grpc_socket_factory_vtable *vtable)
grpc_socket_factory_bind
int grpc_socket_factory_bind(grpc_socket_factory *factory, int sockfd, const grpc_resolved_address *addr)
vtable
static const grpc_transport_vtable vtable
Definition: binder_transport.cc:680
grpc_socket_factory_vtable::bind
int(* bind)(grpc_socket_factory *factory, int sockfd, const grpc_resolved_address *addr)
Definition: socket_factory_posix.h:35
useful.h
protocol
Protocol protocol
Definition: client_callback_end2end_test.cc:67
grpc_resolved_address
Definition: resolved_address.h:34
a
int a
Definition: abseil-cpp/absl/container/internal/hash_policy_traits_test.cc:88
xds_manager.p
p
Definition: xds_manager.py:60
grpc_arg_pointer_vtable
Definition: grpc_types.h:85
grpc_socket_factory_ref
grpc_socket_factory * grpc_socket_factory_ref(grpc_socket_factory *factory)
grpc_types.h
grpc_socket_factory_vtable::destroy
void(* destroy)(grpc_socket_factory *factory)
Definition: socket_factory_posix.h:40
c
void c(T a)
Definition: miscompile_with_no_unique_address_test.cc:40
GRPC_ARG_SOCKET_FACTORY
#define GRPC_ARG_SOCKET_FACTORY
Definition: grpc_types.h:313
grpc_socket_factory::refcount
gpr_refcount refcount
Definition: socket_factory_posix.h:45
grpc_socket_factory_to_arg
grpc_arg grpc_socket_factory_to_arg(grpc_socket_factory *factory)
grpc_socket_factory_vtable
Definition: socket_factory_posix.h:30
grpc_socket_factory_unref
void grpc_socket_factory_unref(grpc_socket_factory *factory)
grpc_socket_factory::vtable
const grpc_socket_factory_vtable * vtable
Definition: socket_factory_posix.h:44
b
uint64_t b
Definition: abseil-cpp/absl/container/internal/layout_test.cc:53
grpc_socket_factory_vtable::compare
int(* compare)(grpc_socket_factory *a, grpc_socket_factory *b)
Definition: socket_factory_posix.h:38
grpc_socket_factory_compare
int grpc_socket_factory_compare(grpc_socket_factory *a, grpc_socket_factory *b)
grpc_core::QsortCompare
int QsortCompare(const T &a, const T &b)
Definition: useful.h:95
port.h
grpc_socket_factory_socket
int grpc_socket_factory_socket(grpc_socket_factory *factory, int domain, int type, int protocol)
channel_args.h
socket_factory_posix.h
grpc_socket_factory_vtable::socket
int(* socket)(grpc_socket_factory *factory, int domain, int type, int protocol)
Definition: socket_factory_posix.h:32
gpr_ref_init
GPRAPI void gpr_ref_init(gpr_refcount *r, int n)
Definition: sync.cc:86
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
gpr_unref
GPRAPI int gpr_unref(gpr_refcount *r)
Definition: sync.cc:103
sync.h
grpc_channel_arg_pointer_create
grpc_arg grpc_channel_arg_pointer_create(char *name, void *value, const grpc_arg_pointer_vtable *vtable)
Definition: channel_args.cc:492
gpr_ref
GPRAPI void gpr_ref(gpr_refcount *r)
Definition: sync.cc:88
addr
struct sockaddr_in addr
Definition: libuv/docs/code/tcp-echo-server/main.c:10
port_platform.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:19