grpc 1.49.0.pre1 → 1.50.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (271) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +54 -153
  3. data/include/grpc/event_engine/endpoint_config.h +11 -5
  4. data/include/grpc/event_engine/event_engine.h +1 -1
  5. data/include/grpc/impl/codegen/atm_gcc_atomic.h +19 -28
  6. data/include/grpc/impl/codegen/atm_gcc_sync.h +0 -2
  7. data/include/grpc/impl/codegen/atm_windows.h +0 -2
  8. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  9. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +3 -3
  10. data/src/core/ext/filters/client_channel/backup_poller.cc +4 -6
  11. data/src/core/ext/filters/client_channel/client_channel.cc +41 -22
  12. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  13. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +0 -16
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +12 -19
  15. data/src/core/ext/filters/client_channel/http_proxy.h +3 -2
  16. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
  17. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -4
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +0 -2
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +114 -103
  20. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +20 -11
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +106 -108
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +16 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +20 -13
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +165 -257
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +218 -231
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -6
  27. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +389 -444
  28. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +16 -16
  29. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +87 -96
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +38 -37
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +106 -186
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +106 -93
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +170 -218
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +2 -2
  36. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  37. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +38 -18
  38. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +84 -37
  39. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +11 -0
  40. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
  41. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +5 -3
  42. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -4
  43. data/src/core/ext/filters/client_channel/retry_filter.cc +25 -29
  44. data/src/core/ext/filters/client_channel/subchannel.cc +38 -33
  45. data/src/core/ext/filters/client_channel/subchannel.h +12 -3
  46. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +1 -2
  47. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +23 -16
  48. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -0
  49. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -2
  50. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +2 -4
  51. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -2
  52. data/src/core/ext/filters/http/server/http_server_filter.cc +1 -2
  53. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +12 -8
  54. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +32 -26
  55. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -1
  56. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +25 -130
  57. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +287 -0
  58. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1018 -0
  59. data/src/core/ext/transport/chttp2/transport/flow_control.cc +83 -51
  60. data/src/core/ext/transport/chttp2/transport/flow_control.h +11 -6
  61. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +1 -2
  62. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -20
  63. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +28 -28
  64. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +1 -10
  65. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +11 -6
  66. data/src/core/ext/transport/chttp2/transport/internal.h +2 -0
  67. data/src/core/ext/transport/chttp2/transport/parsing.cc +44 -0
  68. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -14
  69. data/src/core/ext/transport/inproc/inproc_transport.cc +1 -3
  70. data/src/core/ext/xds/certificate_provider_store.cc +63 -3
  71. data/src/core/ext/xds/certificate_provider_store.h +9 -1
  72. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +5 -5
  73. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -1
  74. data/src/core/ext/xds/xds_api.cc +21 -17
  75. data/src/core/ext/xds/xds_api.h +7 -0
  76. data/src/core/ext/xds/xds_bootstrap.cc +5 -537
  77. data/src/core/ext/xds/xds_bootstrap.h +39 -111
  78. data/src/core/ext/xds/xds_bootstrap_grpc.cc +370 -0
  79. data/src/core/ext/xds/xds_bootstrap_grpc.h +169 -0
  80. data/src/core/ext/xds/xds_client.cc +219 -145
  81. data/src/core/ext/xds/xds_client.h +19 -17
  82. data/src/core/ext/xds/xds_client_grpc.cc +18 -80
  83. data/src/core/ext/xds/xds_client_grpc.h +2 -25
  84. data/src/core/ext/xds/xds_client_stats.cc +4 -4
  85. data/src/core/ext/xds/xds_cluster.cc +87 -79
  86. data/src/core/ext/xds/xds_cluster.h +5 -5
  87. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +3 -1
  88. data/src/core/ext/xds/xds_common_types.cc +13 -5
  89. data/src/core/ext/xds/xds_endpoint.cc +8 -6
  90. data/src/core/ext/xds/xds_endpoint.h +3 -4
  91. data/src/core/ext/xds/xds_lb_policy_registry.cc +4 -2
  92. data/src/core/ext/xds/xds_listener.cc +25 -20
  93. data/src/core/ext/xds/xds_listener.h +3 -4
  94. data/src/core/ext/xds/xds_resource_type.h +11 -8
  95. data/src/core/ext/xds/xds_route_config.cc +15 -16
  96. data/src/core/ext/xds/xds_route_config.h +3 -3
  97. data/src/core/ext/xds/xds_server_config_fetcher.cc +7 -5
  98. data/src/core/ext/xds/xds_transport_grpc.cc +15 -7
  99. data/src/core/lib/backoff/backoff.cc +2 -4
  100. data/src/core/lib/channel/call_finalization.h +1 -3
  101. data/src/core/lib/channel/channel_args.h +114 -14
  102. data/src/core/lib/channel/channel_trace.cc +3 -4
  103. data/src/core/lib/channel/promise_based_filter.cc +18 -19
  104. data/src/core/lib/channel/status_util.cc +27 -0
  105. data/src/core/lib/channel/status_util.h +10 -0
  106. data/src/core/lib/config/core_configuration.cc +5 -1
  107. data/src/core/lib/config/core_configuration.h +33 -0
  108. data/src/core/lib/debug/stats.cc +26 -30
  109. data/src/core/lib/debug/stats.h +2 -12
  110. data/src/core/lib/debug/stats_data.cc +118 -614
  111. data/src/core/lib/debug/stats_data.h +67 -465
  112. data/src/core/lib/debug/trace.cc +0 -2
  113. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +12 -20
  114. data/src/core/lib/event_engine/channel_args_endpoint_config.h +13 -7
  115. data/src/core/lib/event_engine/forkable.cc +19 -16
  116. data/src/core/lib/event_engine/poller.h +14 -12
  117. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +53 -32
  118. data/src/core/lib/event_engine/posix_engine/timer_manager.h +23 -1
  119. data/src/core/lib/event_engine/thread_pool.cc +131 -94
  120. data/src/core/lib/event_engine/thread_pool.h +56 -23
  121. data/src/core/lib/event_engine/time_util.cc +30 -0
  122. data/src/core/lib/event_engine/time_util.h +32 -0
  123. data/src/core/lib/event_engine/utils.cc +0 -5
  124. data/src/core/lib/event_engine/utils.h +0 -4
  125. data/src/core/lib/event_engine/windows/iocp.cc +13 -7
  126. data/src/core/lib/event_engine/windows/iocp.h +2 -1
  127. data/src/core/lib/event_engine/windows/win_socket.cc +1 -1
  128. data/src/core/lib/experiments/config.cc +146 -0
  129. data/src/core/lib/experiments/config.h +43 -0
  130. data/src/core/lib/experiments/experiments.cc +75 -0
  131. data/src/core/lib/experiments/experiments.h +56 -0
  132. data/src/core/lib/gpr/alloc.cc +1 -9
  133. data/src/core/lib/gpr/log_windows.cc +0 -1
  134. data/src/core/lib/gpr/string_util_windows.cc +3 -30
  135. data/src/core/lib/gpr/sync_abseil.cc +0 -14
  136. data/src/core/lib/gpr/sync_posix.cc +0 -14
  137. data/src/core/lib/gpr/time_posix.cc +0 -6
  138. data/src/core/lib/gpr/time_precise.h +1 -1
  139. data/src/core/lib/gpr/tmpfile_windows.cc +5 -7
  140. data/src/core/lib/gpr/useful.h +11 -0
  141. data/src/core/lib/{gpr → gprpp}/env.h +25 -12
  142. data/src/core/lib/{gpr → gprpp}/env_linux.cc +20 -15
  143. data/src/core/lib/{gpr → gprpp}/env_posix.cc +11 -10
  144. data/src/core/lib/gprpp/env_windows.cc +56 -0
  145. data/src/core/lib/gprpp/fork.cc +14 -22
  146. data/src/core/lib/gprpp/fork.h +0 -8
  147. data/src/core/lib/gprpp/global_config_env.cc +7 -6
  148. data/src/core/lib/gprpp/notification.h +67 -0
  149. data/src/core/lib/gprpp/packed_table.h +40 -0
  150. data/src/core/lib/gprpp/ref_counted_ptr.h +20 -33
  151. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  152. data/src/core/lib/gprpp/status_helper.h +6 -0
  153. data/src/core/lib/gprpp/table.h +9 -1
  154. data/src/core/lib/gprpp/tchar.cc +49 -0
  155. data/src/core/lib/gprpp/tchar.h +33 -0
  156. data/src/core/lib/gprpp/time.cc +21 -0
  157. data/src/core/lib/gprpp/time.h +55 -0
  158. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  159. data/src/core/lib/gprpp/validation_errors.h +110 -0
  160. data/src/core/{ext/filters/client_channel → lib/handshaker}/proxy_mapper.h +3 -3
  161. data/src/core/{ext/filters/client_channel → lib/handshaker}/proxy_mapper_registry.cc +14 -36
  162. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  163. data/src/core/lib/iomgr/call_combiner.cc +0 -8
  164. data/src/core/lib/iomgr/closure.h +0 -1
  165. data/src/core/lib/iomgr/endpoint_pair_posix.cc +14 -10
  166. data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
  167. data/src/core/lib/iomgr/ev_epoll1_linux.cc +1 -38
  168. data/src/core/lib/iomgr/ev_poll_posix.cc +2 -17
  169. data/src/core/lib/iomgr/exec_ctx.cc +0 -10
  170. data/src/core/lib/iomgr/exec_ctx.h +7 -31
  171. data/src/core/lib/iomgr/iocp_windows.cc +1 -2
  172. data/src/core/lib/iomgr/iomgr.cc +6 -8
  173. data/src/core/lib/iomgr/iomgr_fwd.h +1 -0
  174. data/src/core/lib/iomgr/pollset.h +1 -1
  175. data/src/core/lib/iomgr/pollset_set.h +0 -1
  176. data/src/core/lib/iomgr/resolve_address.h +1 -0
  177. data/src/core/lib/iomgr/resolve_address_impl.h +1 -0
  178. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -0
  179. data/src/core/lib/iomgr/resolve_address_windows.cc +5 -0
  180. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +2 -1
  181. data/src/core/lib/iomgr/socket_utils_common_posix.cc +12 -34
  182. data/src/core/lib/iomgr/socket_utils_posix.cc +83 -1
  183. data/src/core/lib/iomgr/socket_utils_posix.h +98 -6
  184. data/src/core/lib/iomgr/tcp_client.cc +6 -7
  185. data/src/core/lib/iomgr/tcp_client.h +11 -11
  186. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -6
  187. data/src/core/lib/iomgr/tcp_client_posix.cc +33 -29
  188. data/src/core/lib/iomgr/tcp_client_posix.h +12 -9
  189. data/src/core/lib/iomgr/tcp_client_windows.cc +6 -6
  190. data/src/core/lib/iomgr/tcp_posix.cc +131 -114
  191. data/src/core/lib/iomgr/tcp_posix.h +3 -1
  192. data/src/core/lib/iomgr/tcp_server.cc +5 -4
  193. data/src/core/lib/iomgr/tcp_server.h +9 -6
  194. data/src/core/lib/iomgr/tcp_server_posix.cc +17 -28
  195. data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -2
  196. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +3 -3
  197. data/src/core/lib/iomgr/tcp_server_windows.cc +6 -7
  198. data/src/core/lib/iomgr/tcp_windows.cc +0 -1
  199. data/src/core/lib/iomgr/tcp_windows.h +0 -1
  200. data/src/core/lib/iomgr/timer_generic.cc +4 -4
  201. data/src/core/lib/iomgr/timer_manager.cc +1 -2
  202. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +0 -2
  203. data/src/core/lib/json/json_object_loader.cc +21 -52
  204. data/src/core/lib/json/json_object_loader.h +56 -76
  205. data/src/core/lib/json/json_util.cc +2 -1
  206. data/src/core/lib/load_balancing/lb_policy.h +5 -5
  207. data/src/core/lib/load_balancing/lb_policy_registry.cc +29 -55
  208. data/src/core/lib/load_balancing/lb_policy_registry.h +23 -11
  209. data/src/core/lib/promise/activity.h +2 -3
  210. data/src/core/lib/promise/context.h +1 -1
  211. data/src/core/lib/promise/sleep.cc +16 -4
  212. data/src/core/lib/promise/sleep.h +8 -2
  213. data/src/core/lib/resolver/resolver.h +13 -3
  214. data/src/core/lib/resource_quota/api.cc +9 -0
  215. data/src/core/lib/resource_quota/api.h +6 -0
  216. data/src/core/lib/resource_quota/arena.cc +1 -3
  217. data/src/core/lib/resource_quota/memory_quota.cc +8 -24
  218. data/src/core/lib/resource_quota/memory_quota.h +6 -19
  219. data/src/core/lib/resource_quota/periodic_update.cc +2 -3
  220. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +3 -3
  221. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  222. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  223. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +1 -0
  224. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +15 -16
  225. data/src/core/lib/security/credentials/external/external_account_credentials.cc +2 -1
  226. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +5 -8
  227. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +6 -6
  228. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +3 -2
  229. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
  230. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -2
  231. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +4 -3
  232. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +4 -2
  233. data/src/core/lib/security/credentials/tls/tls_utils.cc +3 -1
  234. data/src/core/lib/security/transport/client_auth_filter.cc +12 -1
  235. data/src/core/lib/security/transport/secure_endpoint.cc +0 -4
  236. data/src/core/lib/surface/call.cc +1 -11
  237. data/src/core/lib/surface/channel.cc +3 -2
  238. data/src/core/lib/surface/completion_queue.cc +16 -28
  239. data/src/core/lib/surface/completion_queue.h +1 -1
  240. data/src/core/lib/surface/completion_queue_factory.cc +5 -0
  241. data/src/core/lib/surface/init.cc +16 -11
  242. data/src/core/lib/surface/init_internally.cc +24 -0
  243. data/src/core/lib/surface/init_internally.h +28 -0
  244. data/src/core/lib/surface/server.cc +1 -7
  245. data/src/core/lib/surface/server.h +4 -6
  246. data/src/core/lib/surface/version.cc +2 -2
  247. data/src/core/lib/transport/bdp_estimator.cc +1 -3
  248. data/src/core/lib/transport/metadata_batch.cc +2 -3
  249. data/src/core/lib/transport/metadata_batch.h +9 -7
  250. data/src/core/lib/transport/parsed_metadata.h +4 -2
  251. data/src/core/lib/transport/status_conversion.cc +1 -3
  252. data/src/core/lib/transport/tcp_connect_handshaker.cc +9 -5
  253. data/src/core/lib/transport/transport.h +0 -1
  254. data/src/core/lib/transport/transport_impl.h +0 -1
  255. data/src/core/plugin_registry/grpc_plugin_registry.cc +23 -46
  256. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +13 -25
  257. data/src/ruby/ext/grpc/extconf.rb +1 -1
  258. data/src/ruby/lib/grpc/version.rb +1 -1
  259. data/src/ruby/spec/channel_spec.rb +5 -0
  260. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  261. data/src/ruby/spec/user_agent_spec.rb +1 -1
  262. metadata +31 -17
  263. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -56
  264. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  265. data/src/core/ext/xds/certificate_provider_registry.h +0 -59
  266. data/src/core/lib/event_engine/promise.h +0 -78
  267. data/src/core/lib/gpr/env_windows.cc +0 -74
  268. data/src/core/lib/gpr/string_windows.h +0 -32
  269. data/src/core/lib/profiling/basic_timers.cc +0 -295
  270. data/src/core/lib/profiling/stap_timers.cc +0 -50
  271. data/src/core/lib/profiling/timers.h +0 -94
@@ -21,15 +21,14 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <sys/socket.h>
25
- #include <unistd.h>
26
-
24
+ #include <grpc/event_engine/endpoint_config.h>
27
25
  #include <grpc/impl/codegen/grpc_types.h>
28
26
 
29
27
  #include "src/core/lib/iomgr/error.h"
30
28
  #include "src/core/lib/iomgr/resolve_address.h"
31
29
  #include "src/core/lib/iomgr/socket_factory_posix.h"
32
30
  #include "src/core/lib/iomgr/socket_mutator.h"
31
+ #include "src/core/lib/resource_quota/resource_quota.h"
33
32
 
34
33
  #ifdef GRPC_LINUX_ERRQUEUE
35
34
  #ifndef SO_ZEROCOPY
@@ -40,6 +39,98 @@
40
39
  #endif
41
40
  #endif /* ifdef GRPC_LINUX_ERRQUEUE */
42
41
 
42
+ namespace grpc_core {
43
+
44
+ struct PosixTcpOptions {
45
+ static constexpr int kDefaultReadChunkSize = 8192;
46
+ static constexpr int kDefaultMinReadChunksize = 256;
47
+ static constexpr int kDefaultMaxReadChunksize = 4 * 1024 * 1024;
48
+ static constexpr int kZerocpTxEnabledDefault = 0;
49
+ static constexpr int kMaxChunkSize = 32 * 1024 * 1024;
50
+ static constexpr int kDefaultMaxSends = 4;
51
+ static constexpr size_t kDefaultSendBytesThreshold = 16 * 1024;
52
+ int tcp_read_chunk_size = kDefaultReadChunkSize;
53
+ int tcp_min_read_chunk_size = kDefaultMinReadChunksize;
54
+ int tcp_max_read_chunk_size = kDefaultMaxReadChunksize;
55
+ int tcp_tx_zerocopy_send_bytes_threshold = kDefaultSendBytesThreshold;
56
+ int tcp_tx_zerocopy_max_simultaneous_sends = kDefaultMaxSends;
57
+ bool tcp_tx_zero_copy_enabled = kZerocpTxEnabledDefault;
58
+ int keep_alive_time_ms = 0;
59
+ int keep_alive_timeout_ms = 0;
60
+ bool expand_wildcard_addrs = false;
61
+ bool allow_reuse_port = false;
62
+ RefCountedPtr<ResourceQuota> resource_quota;
63
+ struct grpc_socket_mutator* socket_mutator = nullptr;
64
+ PosixTcpOptions() = default;
65
+ // Move ctor
66
+ PosixTcpOptions(PosixTcpOptions&& other) noexcept {
67
+ socket_mutator = absl::exchange(other.socket_mutator, nullptr);
68
+ resource_quota = std::move(other.resource_quota);
69
+ CopyIntegerOptions(other);
70
+ }
71
+ // Move assignment
72
+ PosixTcpOptions& operator=(PosixTcpOptions&& other) noexcept {
73
+ if (socket_mutator != nullptr) {
74
+ grpc_socket_mutator_unref(socket_mutator);
75
+ }
76
+ socket_mutator = absl::exchange(other.socket_mutator, nullptr);
77
+ resource_quota = std::move(other.resource_quota);
78
+ CopyIntegerOptions(other);
79
+ return *this;
80
+ }
81
+ // Copy ctor
82
+ PosixTcpOptions(const PosixTcpOptions& other) {
83
+ if (other.socket_mutator != nullptr) {
84
+ socket_mutator = grpc_socket_mutator_ref(other.socket_mutator);
85
+ }
86
+ resource_quota = other.resource_quota;
87
+ CopyIntegerOptions(other);
88
+ }
89
+ // Copy assignment
90
+ PosixTcpOptions& operator=(const PosixTcpOptions& other) {
91
+ if (&other == this) {
92
+ return *this;
93
+ }
94
+ if (socket_mutator != nullptr) {
95
+ grpc_socket_mutator_unref(socket_mutator);
96
+ socket_mutator = nullptr;
97
+ }
98
+ if (other.socket_mutator != nullptr) {
99
+ socket_mutator = grpc_socket_mutator_ref(other.socket_mutator);
100
+ }
101
+ resource_quota = other.resource_quota;
102
+ CopyIntegerOptions(other);
103
+ return *this;
104
+ }
105
+ // Destructor.
106
+ ~PosixTcpOptions() {
107
+ if (socket_mutator != nullptr) {
108
+ grpc_socket_mutator_unref(socket_mutator);
109
+ }
110
+ }
111
+
112
+ private:
113
+ void CopyIntegerOptions(const PosixTcpOptions& other) {
114
+ tcp_read_chunk_size = other.tcp_read_chunk_size;
115
+ tcp_min_read_chunk_size = other.tcp_min_read_chunk_size;
116
+ tcp_max_read_chunk_size = other.tcp_max_read_chunk_size;
117
+ tcp_tx_zerocopy_send_bytes_threshold =
118
+ other.tcp_tx_zerocopy_send_bytes_threshold;
119
+ tcp_tx_zerocopy_max_simultaneous_sends =
120
+ other.tcp_tx_zerocopy_max_simultaneous_sends;
121
+ tcp_tx_zero_copy_enabled = other.tcp_tx_zero_copy_enabled;
122
+ keep_alive_time_ms = other.keep_alive_time_ms;
123
+ keep_alive_timeout_ms = other.keep_alive_timeout_ms;
124
+ expand_wildcard_addrs = other.expand_wildcard_addrs;
125
+ allow_reuse_port = other.allow_reuse_port;
126
+ }
127
+ };
128
+
129
+ } // namespace grpc_core
130
+
131
+ grpc_core::PosixTcpOptions TcpOptionsFromEndpointConfig(
132
+ const grpc_event_engine::experimental::EndpointConfig& config);
133
+
43
134
  /* a wrapper for accept or accept4 */
44
135
  int grpc_accept4(int sockfd, grpc_resolved_address* resolved_addr, int nonblock,
45
136
  int cloexec);
@@ -70,7 +161,7 @@ void config_default_tcp_user_timeout(bool enable, int timeout, bool is_client);
70
161
 
71
162
  /* Set TCP_USER_TIMEOUT */
72
163
  grpc_error_handle grpc_set_socket_tcp_user_timeout(
73
- int fd, const grpc_channel_args* channel_args, bool is_client);
164
+ int fd, const grpc_core::PosixTcpOptions& options, bool is_client);
74
165
 
75
166
  /* Returns true if this system can create AF_INET6 sockets bound to ::1.
76
167
  The value is probed once, and cached for the life of the process.
@@ -104,9 +195,10 @@ grpc_error_handle grpc_set_socket_rcvbuf(int fd, int buffer_size_bytes);
104
195
  grpc_error_handle grpc_set_socket_with_mutator(int fd, grpc_fd_usage usage,
105
196
  grpc_socket_mutator* mutator);
106
197
 
107
- /* Extracts the first socket mutator from args if any and applies on the fd. */
198
+ /* Extracts the first socket mutator from config if any and applies on the fd.
199
+ */
108
200
  grpc_error_handle grpc_apply_socket_mutator_in_args(
109
- int fd, grpc_fd_usage usage, const grpc_channel_args* args);
201
+ int fd, grpc_fd_usage usage, const grpc_core::PosixTcpOptions& options);
110
202
 
111
203
  /* An enum to keep track of IPv4/IPv6 socket modes.
112
204
 
@@ -22,14 +22,13 @@
22
22
 
23
23
  grpc_tcp_client_vtable* grpc_tcp_client_impl;
24
24
 
25
- int64_t grpc_tcp_client_connect(grpc_closure* on_connect,
26
- grpc_endpoint** endpoint,
27
- grpc_pollset_set* interested_parties,
28
- const grpc_channel_args* channel_args,
29
- const grpc_resolved_address* addr,
30
- grpc_core::Timestamp deadline) {
25
+ int64_t grpc_tcp_client_connect(
26
+ grpc_closure* on_connect, grpc_endpoint** endpoint,
27
+ grpc_pollset_set* interested_parties,
28
+ const grpc_event_engine::experimental::EndpointConfig& config,
29
+ const grpc_resolved_address* addr, grpc_core::Timestamp deadline) {
31
30
  return grpc_tcp_client_impl->connect(on_connect, endpoint, interested_parties,
32
- channel_args, addr, deadline);
31
+ config, addr, deadline);
33
32
  }
34
33
 
35
34
  bool grpc_tcp_client_cancel_connect(int64_t connection_handle) {
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <grpc/event_engine/endpoint_config.h>
24
25
  #include <grpc/impl/codegen/grpc_types.h>
25
26
  #include <grpc/support/time.h>
26
27
 
@@ -30,11 +31,11 @@
30
31
  #include "src/core/lib/resource_quota/memory_quota.h"
31
32
 
32
33
  typedef struct grpc_tcp_client_vtable {
33
- int64_t (*connect)(grpc_closure* on_connect, grpc_endpoint** endpoint,
34
- grpc_pollset_set* interested_parties,
35
- const grpc_channel_args* channel_args,
36
- const grpc_resolved_address* addr,
37
- grpc_core::Timestamp deadline);
34
+ int64_t (*connect)(
35
+ grpc_closure* on_connect, grpc_endpoint** endpoint,
36
+ grpc_pollset_set* interested_parties,
37
+ const grpc_event_engine::experimental::EndpointConfig& config,
38
+ const grpc_resolved_address* addr, grpc_core::Timestamp deadline);
38
39
  bool (*cancel_connect)(int64_t connection_handle);
39
40
  } grpc_tcp_client_vtable;
40
41
 
@@ -45,12 +46,11 @@ typedef struct grpc_tcp_client_vtable {
45
46
  in this connection being established (in order to continue their work). It
46
47
  returns a handle to the connect operation which can be used to cancel the
47
48
  connection attempt. */
48
- int64_t grpc_tcp_client_connect(grpc_closure* on_connect,
49
- grpc_endpoint** endpoint,
50
- grpc_pollset_set* interested_parties,
51
- const grpc_channel_args* channel_args,
52
- const grpc_resolved_address* addr,
53
- grpc_core::Timestamp deadline);
49
+ int64_t grpc_tcp_client_connect(
50
+ grpc_closure* on_connect, grpc_endpoint** endpoint,
51
+ grpc_pollset_set* interested_parties,
52
+ const grpc_event_engine::experimental::EndpointConfig& config,
53
+ const grpc_resolved_address* addr, grpc_core::Timestamp deadline);
54
54
 
55
55
  // Returns true if a connect attempt corresponding to the provided handle
56
56
  // is successfully cancelled. Otherwise it returns false. If the connect
@@ -27,12 +27,12 @@
27
27
  #include <netinet/in.h>
28
28
  #include <string.h>
29
29
 
30
+ #include <grpc/event_engine/endpoint_config.h>
30
31
  #include <grpc/support/alloc.h>
31
32
  #include <grpc/support/log.h>
32
33
  #include <grpc/support/sync.h>
33
34
 
34
35
  #include "src/core/lib/address_utils/sockaddr_utils.h"
35
- #include "src/core/lib/channel/channel_args.h"
36
36
  #include "src/core/lib/gprpp/host_port.h"
37
37
  #include "src/core/lib/iomgr/cfstream_handle.h"
38
38
  #include "src/core/lib/iomgr/closure.h"
@@ -149,11 +149,11 @@ static void ParseResolvedAddress(const grpc_resolved_address* addr,
149
149
  *port = grpc_sockaddr_get_port(addr);
150
150
  }
151
151
 
152
- static int64_t CFStreamClientConnect(grpc_closure* closure, grpc_endpoint** ep,
153
- grpc_pollset_set* interested_parties,
154
- const grpc_channel_args* channel_args,
155
- const grpc_resolved_address* resolved_addr,
156
- grpc_core::Timestamp deadline) {
152
+ static int64_t CFStreamClientConnect(
153
+ grpc_closure* closure, grpc_endpoint** ep,
154
+ grpc_pollset_set* interested_parties,
155
+ const grpc_event_engine::experimental::EndpointConfig& /*config*/,
156
+ const grpc_resolved_address* resolved_addr, grpc_core::Timestamp deadline) {
157
157
  auto addr_uri = grpc_sockaddr_to_uri(resolved_addr);
158
158
  if (!addr_uri.ok()) {
159
159
  grpc_error_handle error =
@@ -35,7 +35,6 @@
35
35
  #include <grpc/support/time.h>
36
36
 
37
37
  #include "src/core/lib/address_utils/sockaddr_utils.h"
38
- #include "src/core/lib/channel/channel_args.h"
39
38
  #include "src/core/lib/gpr/string.h"
40
39
  #include "src/core/lib/iomgr/ev_posix.h"
41
40
  #include "src/core/lib/iomgr/executor.h"
@@ -51,6 +50,8 @@
51
50
 
52
51
  extern grpc_core::TraceFlag grpc_tcp_trace;
53
52
 
53
+ using ::grpc_event_engine::experimental::EndpointConfig;
54
+
54
55
  struct async_connect {
55
56
  gpr_mu mu;
56
57
  grpc_fd* fd;
@@ -62,9 +63,9 @@ struct async_connect {
62
63
  std::string addr_str;
63
64
  grpc_endpoint** ep;
64
65
  grpc_closure* closure;
65
- grpc_channel_args* channel_args;
66
66
  int64_t connection_handle;
67
67
  bool connect_cancelled;
68
+ grpc_core::PosixTcpOptions options;
68
69
  };
69
70
 
70
71
  struct ConnectionShard {
@@ -90,9 +91,9 @@ void grpc_tcp_client_global_init() {
90
91
  gpr_once_init(&g_tcp_client_posix_init, do_tcp_client_global_init);
91
92
  }
92
93
 
93
- static grpc_error_handle prepare_socket(const grpc_resolved_address* addr,
94
- int fd,
95
- const grpc_channel_args* channel_args) {
94
+ static grpc_error_handle prepare_socket(
95
+ const grpc_resolved_address* addr, int fd,
96
+ const grpc_core::PosixTcpOptions& options) {
96
97
  grpc_error_handle err = GRPC_ERROR_NONE;
97
98
 
98
99
  GPR_ASSERT(fd >= 0);
@@ -106,15 +107,14 @@ static grpc_error_handle prepare_socket(const grpc_resolved_address* addr,
106
107
  if (!GRPC_ERROR_IS_NONE(err)) goto error;
107
108
  err = grpc_set_socket_reuse_addr(fd, 1);
108
109
  if (!GRPC_ERROR_IS_NONE(err)) goto error;
109
- err = grpc_set_socket_tcp_user_timeout(fd, channel_args,
110
- true /* is_client */);
110
+ err = grpc_set_socket_tcp_user_timeout(fd, options, true /* is_client */);
111
111
  if (!GRPC_ERROR_IS_NONE(err)) goto error;
112
112
  }
113
113
  err = grpc_set_socket_no_sigpipe_if_possible(fd);
114
114
  if (!GRPC_ERROR_IS_NONE(err)) goto error;
115
115
 
116
116
  err = grpc_apply_socket_mutator_in_args(fd, GRPC_FD_CLIENT_CONNECTION_USAGE,
117
- channel_args);
117
+ options);
118
118
  if (!GRPC_ERROR_IS_NONE(err)) goto error;
119
119
 
120
120
  goto done;
@@ -143,15 +143,20 @@ static void tc_on_alarm(void* acp, grpc_error_handle error) {
143
143
  gpr_mu_unlock(&ac->mu);
144
144
  if (done) {
145
145
  gpr_mu_destroy(&ac->mu);
146
- grpc_channel_args_destroy(ac->channel_args);
147
146
  delete ac;
148
147
  }
149
148
  }
150
149
 
151
- grpc_endpoint* grpc_tcp_client_create_from_fd(
152
- grpc_fd* fd, const grpc_channel_args* channel_args,
150
+ static grpc_endpoint* grpc_tcp_client_create_from_fd(
151
+ grpc_fd* fd, const grpc_core::PosixTcpOptions& options,
152
+ absl::string_view addr_str) {
153
+ return grpc_tcp_create(fd, options, addr_str);
154
+ }
155
+
156
+ grpc_endpoint* grpc_tcp_create_from_fd(
157
+ grpc_fd* fd, const grpc_event_engine::experimental::EndpointConfig& config,
153
158
  absl::string_view addr_str) {
154
- return grpc_tcp_create(fd, channel_args, addr_str);
159
+ return grpc_tcp_create(fd, TcpOptionsFromEndpointConfig(config), addr_str);
155
160
  }
156
161
 
157
162
  static void on_writable(void* acp, grpc_error_handle error) {
@@ -207,7 +212,7 @@ static void on_writable(void* acp, grpc_error_handle error) {
207
212
  switch (so_error) {
208
213
  case 0:
209
214
  grpc_pollset_set_del_fd(ac->interested_parties, fd);
210
- *ep = grpc_tcp_client_create_from_fd(fd, ac->channel_args, ac->addr_str);
215
+ *ep = grpc_tcp_client_create_from_fd(fd, ac->options, ac->addr_str);
211
216
  fd = nullptr;
212
217
  break;
213
218
  case ENOBUFS:
@@ -269,7 +274,6 @@ finish:
269
274
  // This is safe even outside the lock, because "done", the sentinel, is
270
275
  // populated *inside* the lock.
271
276
  gpr_mu_destroy(&ac->mu);
272
- grpc_channel_args_destroy(ac->channel_args);
273
277
  delete ac;
274
278
  }
275
279
  // Push async connect closure to the executor since this may actually be
@@ -284,8 +288,9 @@ finish:
284
288
  }
285
289
 
286
290
  grpc_error_handle grpc_tcp_client_prepare_fd(
287
- const grpc_channel_args* channel_args, const grpc_resolved_address* addr,
288
- grpc_resolved_address* mapped_addr, int* fd) {
291
+ const grpc_core::PosixTcpOptions& options,
292
+ const grpc_resolved_address* addr, grpc_resolved_address* mapped_addr,
293
+ int* fd) {
289
294
  grpc_dualstack_mode dsmode;
290
295
  grpc_error_handle error;
291
296
  *fd = -1;
@@ -306,8 +311,7 @@ grpc_error_handle grpc_tcp_client_prepare_fd(
306
311
  memcpy(mapped_addr, addr, sizeof(*mapped_addr));
307
312
  }
308
313
  }
309
- if ((error = prepare_socket(mapped_addr, *fd, channel_args)) !=
310
- GRPC_ERROR_NONE) {
314
+ if ((error = prepare_socket(mapped_addr, *fd, options)) != GRPC_ERROR_NONE) {
311
315
  return error;
312
316
  }
313
317
  return GRPC_ERROR_NONE;
@@ -315,8 +319,9 @@ grpc_error_handle grpc_tcp_client_prepare_fd(
315
319
 
316
320
  int64_t grpc_tcp_client_create_from_prepared_fd(
317
321
  grpc_pollset_set* interested_parties, grpc_closure* closure, const int fd,
318
- const grpc_channel_args* channel_args, const grpc_resolved_address* addr,
319
- grpc_core::Timestamp deadline, grpc_endpoint** ep) {
322
+ const grpc_core::PosixTcpOptions& options,
323
+ const grpc_resolved_address* addr, grpc_core::Timestamp deadline,
324
+ grpc_endpoint** ep) {
320
325
  int err;
321
326
  do {
322
327
  err = connect(fd, reinterpret_cast<const grpc_sockaddr*>(addr->addr),
@@ -342,7 +347,7 @@ int64_t grpc_tcp_client_create_from_prepared_fd(
342
347
  if (err >= 0) {
343
348
  // Connection already succeded. Return 0 to discourage any cancellation
344
349
  // attempts.
345
- *ep = grpc_tcp_client_create_from_fd(fdobj, channel_args, addr_uri.value());
350
+ *ep = grpc_tcp_client_create_from_fd(fdobj, options, addr_uri.value());
346
351
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_NONE);
347
352
  return 0;
348
353
  }
@@ -371,7 +376,7 @@ int64_t grpc_tcp_client_create_from_prepared_fd(
371
376
  ac->refs = 2;
372
377
  GRPC_CLOSURE_INIT(&ac->write_closure, on_writable, ac,
373
378
  grpc_schedule_on_exec_ctx);
374
- ac->channel_args = grpc_channel_args_copy(channel_args);
379
+ ac->options = options;
375
380
 
376
381
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
377
382
  gpr_log(GPR_INFO, "CLIENT_CONNECT: %s: asynchronously connecting fd %p",
@@ -395,21 +400,21 @@ int64_t grpc_tcp_client_create_from_prepared_fd(
395
400
 
396
401
  static int64_t tcp_connect(grpc_closure* closure, grpc_endpoint** ep,
397
402
  grpc_pollset_set* interested_parties,
398
- const grpc_channel_args* channel_args,
403
+ const EndpointConfig& config,
399
404
  const grpc_resolved_address* addr,
400
405
  grpc_core::Timestamp deadline) {
401
406
  grpc_resolved_address mapped_addr;
407
+ grpc_core::PosixTcpOptions options(TcpOptionsFromEndpointConfig(config));
402
408
  int fd = -1;
403
409
  grpc_error_handle error;
404
410
  *ep = nullptr;
405
- if ((error = grpc_tcp_client_prepare_fd(channel_args, addr, &mapped_addr,
406
- &fd)) != GRPC_ERROR_NONE) {
411
+ if ((error = grpc_tcp_client_prepare_fd(options, addr, &mapped_addr, &fd)) !=
412
+ GRPC_ERROR_NONE) {
407
413
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
408
414
  return 0;
409
415
  }
410
- return grpc_tcp_client_create_from_prepared_fd(interested_parties, closure,
411
- fd, channel_args, &mapped_addr,
412
- deadline, ep);
416
+ return grpc_tcp_client_create_from_prepared_fd(
417
+ interested_parties, closure, fd, options, &mapped_addr, deadline, ep);
413
418
  }
414
419
 
415
420
  static bool tcp_cancel_connect(int64_t connection_handle) {
@@ -458,7 +463,6 @@ static bool tcp_cancel_connect(int64_t connection_handle) {
458
463
  // This is safe even outside the lock, because "done", the sentinel, is
459
464
  // populated *inside* the lock.
460
465
  gpr_mu_destroy(&ac->mu);
461
- grpc_channel_args_destroy(ac->channel_args);
462
466
  delete ac;
463
467
  }
464
468
  return connection_cancel_success;
@@ -23,23 +23,24 @@
23
23
 
24
24
  #include "src/core/lib/iomgr/endpoint.h"
25
25
  #include "src/core/lib/iomgr/ev_posix.h"
26
+ #include "src/core/lib/iomgr/socket_utils_posix.h"
26
27
  #include "src/core/lib/iomgr/tcp_client.h"
27
28
 
28
29
  /* Create an endpoint from a connected grpc_fd.
29
30
 
30
31
  fd: a connected FD. Ownership is taken.
31
- channel_args: may contain custom settings for the endpoint
32
+ config: may contain custom settings for the endpoint
32
33
  addr_str: destination address in printable format
33
34
  slice_allocator: ownership is taken by client.
34
35
  Returns: a new endpoint
35
36
  */
36
- grpc_endpoint* grpc_tcp_client_create_from_fd(
37
- grpc_fd* fd, const grpc_channel_args* channel_args,
37
+ grpc_endpoint* grpc_tcp_create_from_fd(
38
+ grpc_fd* fd, const grpc_event_engine::experimental::EndpointConfig& config,
38
39
  absl::string_view addr_str);
39
40
 
40
41
  /* Return a configured, unbound, unconnected TCP client fd.
41
42
 
42
- channel_args: may contain custom settings for the fd
43
+ options: may contain custom settings for the fd
43
44
  addr: the destination address
44
45
  mapped_addr: out parameter. addr mapped to an address appropriate to the
45
46
  type of socket FD created. For example, if addr is IPv4 and dual stack
@@ -48,8 +49,9 @@ grpc_endpoint* grpc_tcp_client_create_from_fd(
48
49
  Returns: error, if any. Out parameters are not set on error
49
50
  */
50
51
  grpc_error_handle grpc_tcp_client_prepare_fd(
51
- const grpc_channel_args* channel_args, const grpc_resolved_address* addr,
52
- grpc_resolved_address* mapped_addr, int* fd);
52
+ const grpc_core::PosixTcpOptions& options,
53
+ const grpc_resolved_address* addr, grpc_resolved_address* mapped_addr,
54
+ int* fd);
53
55
 
54
56
  /* Connect a configured TCP client fd.
55
57
 
@@ -57,13 +59,14 @@ grpc_error_handle grpc_tcp_client_prepare_fd(
57
59
  connection being established (in order to continue their work
58
60
  closure: called when complete. On success, *ep will be set.
59
61
  fd: an FD returned from grpc_tcp_client_prepare_fd().
60
- channel_args: may contain custom settings for the endpoint
62
+ options: may contain custom settings for the endpoint
61
63
  deadline: connection deadline
62
64
  ep: out parameter. Set before closure is called if successful
63
65
  */
64
66
  int64_t grpc_tcp_client_create_from_prepared_fd(
65
67
  grpc_pollset_set* interested_parties, grpc_closure* closure, const int fd,
66
- const grpc_channel_args* channel_args, const grpc_resolved_address* addr,
67
- grpc_core::Timestamp deadline, grpc_endpoint** ep);
68
+ const grpc_core::PosixTcpOptions& options,
69
+ const grpc_resolved_address* addr, grpc_core::Timestamp deadline,
70
+ grpc_endpoint** ep);
68
71
 
69
72
  #endif /* GRPC_CORE_LIB_IOMGR_TCP_CLIENT_POSIX_H */
@@ -24,13 +24,13 @@
24
24
 
25
25
  #ifdef GRPC_WINSOCK_SOCKET
26
26
 
27
+ #include <grpc/event_engine/endpoint_config.h>
27
28
  #include <grpc/slice_buffer.h>
28
29
  #include <grpc/support/alloc.h>
29
30
  #include <grpc/support/log.h>
30
31
  #include <grpc/support/log_windows.h>
31
32
 
32
33
  #include "src/core/lib/address_utils/sockaddr_utils.h"
33
- #include "src/core/lib/channel/channel_args.h"
34
34
  #include "src/core/lib/iomgr/iocp_windows.h"
35
35
  #include "src/core/lib/iomgr/sockaddr.h"
36
36
  #include "src/core/lib/iomgr/sockaddr_windows.h"
@@ -38,8 +38,11 @@
38
38
  #include "src/core/lib/iomgr/tcp_client.h"
39
39
  #include "src/core/lib/iomgr/tcp_windows.h"
40
40
  #include "src/core/lib/iomgr/timer.h"
41
+ #include "src/core/lib/resource_quota/api.h"
41
42
  #include "src/core/lib/slice/slice_internal.h"
42
43
 
44
+ using ::grpc_event_engine::experimental::EndpointConfig;
45
+
43
46
  struct async_connect {
44
47
  grpc_closure* on_done;
45
48
  gpr_mu mu;
@@ -50,7 +53,6 @@ struct async_connect {
50
53
  int refs;
51
54
  grpc_closure on_connect;
52
55
  grpc_endpoint** endpoint;
53
- grpc_channel_args* channel_args;
54
56
  };
55
57
 
56
58
  static void async_connect_unlock_and_cleanup(async_connect* ac,
@@ -58,7 +60,6 @@ static void async_connect_unlock_and_cleanup(async_connect* ac,
58
60
  int done = (--ac->refs == 0);
59
61
  gpr_mu_unlock(&ac->mu);
60
62
  if (done) {
61
- grpc_channel_args_destroy(ac->channel_args);
62
63
  gpr_mu_destroy(&ac->mu);
63
64
  delete ac;
64
65
  }
@@ -105,7 +106,7 @@ static void on_connect(void* acp, grpc_error_handle error) {
105
106
  error = GRPC_WSA_ERROR(WSAGetLastError(), "ConnectEx");
106
107
  closesocket(socket->socket);
107
108
  } else {
108
- *ep = grpc_tcp_create(socket, ac->channel_args, ac->addr_name);
109
+ *ep = grpc_tcp_create(socket, ac->addr_name);
109
110
  socket = nullptr;
110
111
  }
111
112
  } else {
@@ -123,7 +124,7 @@ static void on_connect(void* acp, grpc_error_handle error) {
123
124
  notification request for the connection, and one timeout alert. */
124
125
  static int64_t tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
125
126
  grpc_pollset_set* interested_parties,
126
- const grpc_channel_args* channel_args,
127
+ const EndpointConfig& config,
127
128
  const grpc_resolved_address* addr,
128
129
  grpc_core::Timestamp deadline) {
129
130
  SOCKET sock = INVALID_SOCKET;
@@ -208,7 +209,6 @@ static int64_t tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
208
209
  ac->refs = 2;
209
210
  ac->addr_name = addr_uri.value();
210
211
  ac->endpoint = endpoint;
211
- ac->channel_args = grpc_channel_args_copy(channel_args);
212
212
  GRPC_CLOSURE_INIT(&ac->on_connect, on_connect, ac, grpc_schedule_on_exec_ctx);
213
213
 
214
214
  GRPC_CLOSURE_INIT(&ac->on_alarm, on_alarm, ac, grpc_schedule_on_exec_ctx);