GRPC Core  9.0.0
Data Structures | Macros | Enumerations | Functions | Variables
server.cc File Reference
#include <grpc/support/port_platform.h>
#include "src/core/lib/surface/server.h"
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
#include <utility>
#include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/channel/channelz.h"
#include "src/core/lib/channel/connected_channel.h"
#include "src/core/lib/debug/stats.h"
#include "src/core/lib/gpr/spinlock.h"
#include "src/core/lib/gprpp/mpscq.h"
#include "src/core/lib/iomgr/executor.h"
#include "src/core/lib/iomgr/iomgr.h"
#include "src/core/lib/slice/slice_internal.h"
#include "src/core/lib/surface/api_trace.h"
#include "src/core/lib/surface/call.h"
#include "src/core/lib/surface/channel.h"
#include "src/core/lib/surface/completion_queue.h"
#include "src/core/lib/surface/init.h"
#include "src/core/lib/transport/metadata.h"
#include "src/core/lib/transport/static_metadata.h"

Data Structures

struct  grpc_server
 
struct  shutdown_cleanup_args
 
class  ConnectivityWatcher
 

Macros

#define SERVER_FROM_CALL_ELEM(elem)   (((channel_data*)(elem)->channel_data)->server)
 

Enumerations

enum  requested_call_type
 
enum  call_state
 

Functions

void grpc_server_register_completion_queue (grpc_server *server, grpc_completion_queue *cq, void *reserved)
 Register a completion queue with the server. More...
 
grpc_servergrpc_server_create (const grpc_channel_args *args, void *reserved)
 Create a server. More...
 
void * grpc_server_register_method (grpc_server *server, const char *method, const char *host, grpc_server_register_method_payload_handling payload_handling, uint32_t flags)
 Registers a method in the server. More...
 
void grpc_server_start (grpc_server *server)
 Start a server - tells all listeners to start listening. More...
 
void grpc_server_get_pollsets (grpc_server *server, grpc_pollset ***pollsets, size_t *pollset_count)
 
void grpc_server_setup_transport (grpc_server *s, grpc_transport *transport, grpc_pollset *accepting_pollset, const grpc_channel_args *args, const grpc_core::RefCountedPtr< grpc_core::channelz::SocketNode > &socket_node, grpc_resource_user *resource_user)
 
void done_published_shutdown (void *done_arg, grpc_cq_completion *storage)
 
void grpc_server_shutdown_and_notify (grpc_server *server, grpc_completion_queue *cq, void *tag)
 Begin shutting down a server. More...
 
void grpc_server_cancel_all_calls (grpc_server *server)
 Cancel all in-progress calls. More...
 
void grpc_server_destroy (grpc_server *server)
 Destroy a server. More...
 
void grpc_server_add_listener (grpc_server *server, void *listener_arg, void(*start)(grpc_server *server, void *arg, grpc_pollset **pollsets, size_t pollset_count), void(*destroy)(grpc_server *server, void *arg, grpc_closure *on_done), grpc_core::RefCountedPtr< grpc_core::channelz::ListenSocketNode > node)
 
grpc_call_error grpc_server_request_call (grpc_server *server, grpc_call **call, grpc_call_details *details, grpc_metadata_array *initial_metadata, grpc_completion_queue *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void *tag)
 Request notification of a new call. More...
 
grpc_call_error grpc_server_request_registered_call (grpc_server *server, void *rmp, grpc_call **call, gpr_timespec *deadline, grpc_metadata_array *initial_metadata, grpc_byte_buffer **optional_payload, grpc_completion_queue *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void *tag)
 Request notification of a new pre-registered call. More...
 
const grpc_channel_argsgrpc_server_get_channel_args (grpc_server *server)
 
grpc_resource_usergrpc_server_get_default_resource_user (grpc_server *server)
 
int grpc_server_has_open_connections (grpc_server *server)
 
grpc_core::channelz::ServerNodegrpc_server_get_channelz_node (grpc_server *server)
 

Variables

grpc_core::TraceFlag grpc_server_channel_trace (false, "server_channel")
 Lightweight tracing of server channel state. More...
 
const grpc_channel_filter grpc_server_top_filter
 

Macro Definition Documentation

◆ SERVER_FROM_CALL_ELEM

#define SERVER_FROM_CALL_ELEM (   elem)    (((channel_data*)(elem)->channel_data)->server)

Enumeration Type Documentation

◆ call_state

enum call_state

◆ requested_call_type

Function Documentation

◆ done_published_shutdown()

void done_published_shutdown ( void *  done_arg,
grpc_cq_completion storage 
)

◆ grpc_server_add_listener()

void grpc_server_add_listener ( grpc_server server,
void *  listener_arg,
void(*)(grpc_server *server, void *arg, grpc_pollset **pollsets, size_t pollset_count)  start,
void(*)(grpc_server *server, void *arg, grpc_closure *on_done)  destroy,
grpc_core::RefCountedPtr< grpc_core::channelz::ListenSocketNode node 
)

◆ grpc_server_cancel_all_calls()

void grpc_server_cancel_all_calls ( grpc_server server)

Cancel all in-progress calls.

Only usable after shutdown.

◆ grpc_server_create()

grpc_server* grpc_server_create ( const grpc_channel_args args,
void *  reserved 
)

Create a server.

Additional configuration for each incoming channel can be specified with args. If no additional configuration is needed, args can be NULL. The user data in 'args' need only live through the invocation of this function. However, if any args of the 'pointer' type are passed, then the referenced vtable must be maintained by the caller until grpc_server_destroy terminates. See grpc_channel_args definition for more on this.

◆ grpc_server_destroy()

void grpc_server_destroy ( grpc_server server)

Destroy a server.

Shutdown must have completed beforehand (i.e. all tags generated by grpc_server_shutdown_and_notify must have been received, and at least one call to grpc_server_shutdown_and_notify must have been made).

◆ grpc_server_get_channel_args()

const grpc_channel_args* grpc_server_get_channel_args ( grpc_server server)

◆ grpc_server_get_channelz_node()

grpc_core::channelz::ServerNode* grpc_server_get_channelz_node ( grpc_server server)

◆ grpc_server_get_default_resource_user()

grpc_resource_user* grpc_server_get_default_resource_user ( grpc_server server)

◆ grpc_server_get_pollsets()

void grpc_server_get_pollsets ( grpc_server server,
grpc_pollset ***  pollsets,
size_t *  pollset_count 
)

◆ grpc_server_has_open_connections()

int grpc_server_has_open_connections ( grpc_server server)

◆ grpc_server_register_completion_queue()

void grpc_server_register_completion_queue ( grpc_server server,
grpc_completion_queue cq,
void *  reserved 
)

Register a completion queue with the server.

Must be done for any notification completion queue that is passed to grpc_server_request_*_call and to grpc_server_shutdown_and_notify. Must be performed prior to grpc_server_start.

◆ grpc_server_register_method()

void* grpc_server_register_method ( grpc_server server,
const char *  method,
const char *  host,
grpc_server_register_method_payload_handling  payload_handling,
uint32_t  flags 
)

Registers a method in the server.

Methods to this (host, method) pair will not be reported by grpc_server_request_call, but instead be reported by grpc_server_request_registered_call when passed the appropriate registered_method (as returned by this function). Must be called before grpc_server_start. Returns NULL on failure.

◆ grpc_server_request_call()

grpc_call_error grpc_server_request_call ( grpc_server server,
grpc_call **  call,
grpc_call_details details,
grpc_metadata_array request_metadata,
grpc_completion_queue cq_bound_to_call,
grpc_completion_queue cq_for_notification,
void *  tag_new 
)

Request notification of a new call.

Once a call is received, a notification tagged with tag_new is added to cq_for_notification. call, details and request_metadata are updated with the appropriate call information. cq_bound_to_call is bound to call, and batch operation notifications for that call will be posted to cq_bound_to_call. Note that cq_for_notification must have been registered to the server via grpc_server_register_completion_queue.

◆ grpc_server_request_registered_call()

grpc_call_error grpc_server_request_registered_call ( grpc_server server,
void *  registered_method,
grpc_call **  call,
gpr_timespec deadline,
grpc_metadata_array request_metadata,
grpc_byte_buffer **  optional_payload,
grpc_completion_queue cq_bound_to_call,
grpc_completion_queue cq_for_notification,
void *  tag_new 
)

Request notification of a new pre-registered call.

'cq_for_notification' must have been registered to the server via grpc_server_register_completion_queue.

◆ grpc_server_setup_transport()

void grpc_server_setup_transport ( grpc_server s,
grpc_transport transport,
grpc_pollset accepting_pollset,
const grpc_channel_args args,
const grpc_core::RefCountedPtr< grpc_core::channelz::SocketNode > &  socket_node,
grpc_resource_user resource_user 
)

◆ grpc_server_shutdown_and_notify()

void grpc_server_shutdown_and_notify ( grpc_server server,
grpc_completion_queue cq,
void *  tag 
)

Begin shutting down a server.

After completion, no new calls or connections will be admitted. Existing calls will be allowed to complete. Send a GRPC_OP_COMPLETE event when there are no more calls being serviced. Shutdown is idempotent, and all tags will be notified at once if multiple grpc_server_shutdown_and_notify calls are made. 'cq' must have been registered to this server via grpc_server_register_completion_queue.

◆ grpc_server_start()

void grpc_server_start ( grpc_server server)

Start a server - tells all listeners to start listening.

Variable Documentation

◆ grpc_server_channel_trace

grpc_core::TraceFlag grpc_server_channel_trace(false, "server_channel")

Lightweight tracing of server channel state.

◆ grpc_server_top_filter

const grpc_channel_filter grpc_server_top_filter
Initial value:
= {
server_start_transport_stream_op_batch,
sizeof(call_data),
server_init_call_elem,
server_destroy_call_elem,
sizeof(channel_data),
server_init_channel_elem,
server_destroy_channel_elem,
"server",
}
void grpc_channel_next_op(grpc_channel_element *elem, grpc_transport_op *op)
Definition: channel_stack.cc:236
struct connected_channel_channel_data channel_data
struct connected_channel_call_data call_data
void grpc_channel_next_get_info(grpc_channel_element *elem, const grpc_channel_info *channel_info)
Definition: channel_stack.cc:230
void grpc_call_stack_ignore_set_pollset_or_pollset_set(grpc_call_element *, grpc_polling_entity *)
Definition: channel_stack.cc:205