diff options
author | Yuchen Zeng <zyc@google.com> | 2016-10-24 14:43:12 -0700 |
---|---|---|
committer | Yuchen Zeng <zyc@google.com> | 2016-10-24 14:43:12 -0700 |
commit | e5ec9ac9e2e0195e04c7c99d1c2d9a87f67404fb (patch) | |
tree | 1937804d512376063f528f855a807a102a441c74 /src/core/lib/iomgr | |
parent | 5ab4ca5ed838221de17f2cc05a7655dedf516065 (diff) |
Add grpc_endpoint_get_socket and GRPC_SOCKET
Diffstat (limited to 'src/core/lib/iomgr')
-rw-r--r-- | src/core/lib/iomgr/endpoint.h | 6 | ||||
-rw-r--r-- | src/core/lib/iomgr/sockaddr_posix.h | 2 | ||||
-rw-r--r-- | src/core/lib/iomgr/sockaddr_windows.h | 2 | ||||
-rw-r--r-- | src/core/lib/iomgr/tcp_posix.c | 8 |
4 files changed, 17 insertions, 1 deletions
diff --git a/src/core/lib/iomgr/endpoint.h b/src/core/lib/iomgr/endpoint.h index 910a6f6532..22979982e4 100644 --- a/src/core/lib/iomgr/endpoint.h +++ b/src/core/lib/iomgr/endpoint.h @@ -39,6 +39,7 @@ #include <grpc/support/time.h> #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/pollset_set.h" +#include "src/core/lib/iomgr/sockaddr.h" /* An endpoint caps a streaming channel between two communicating processes. Examples may be: a tcp socket, <stdin+stdout>, or some shared memory. */ @@ -59,6 +60,7 @@ struct grpc_endpoint_vtable { void (*shutdown)(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep); void (*destroy)(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep); char *(*get_peer)(grpc_endpoint *ep); + GRPC_SOCKET *(*get_socket)(grpc_endpoint *ep); }; /* When data is available on the connection, calls the callback with slices. @@ -71,6 +73,10 @@ void grpc_endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, char *grpc_endpoint_get_peer(grpc_endpoint *ep); +/* Get the socket (file descriptor or SOCKET) used by \a ep. Return NULL if + \a ep is not using a socket. */ +GRPC_SOCKET *grpc_endpoint_get_socket(grpc_endpoint *ep); + /* Retrieve a reference to the workqueue associated with this endpoint */ grpc_workqueue *grpc_endpoint_get_workqueue(grpc_endpoint *ep); diff --git a/src/core/lib/iomgr/sockaddr_posix.h b/src/core/lib/iomgr/sockaddr_posix.h index b150de42f7..a4236ffaee 100644 --- a/src/core/lib/iomgr/sockaddr_posix.h +++ b/src/core/lib/iomgr/sockaddr_posix.h @@ -41,4 +41,6 @@ #include <sys/types.h> #include <unistd.h> +typedef int GRPC_SOCKET; + #endif /* GRPC_CORE_LIB_IOMGR_SOCKADDR_POSIX_H */ diff --git a/src/core/lib/iomgr/sockaddr_windows.h b/src/core/lib/iomgr/sockaddr_windows.h index 971db5b32b..507fc71f63 100644 --- a/src/core/lib/iomgr/sockaddr_windows.h +++ b/src/core/lib/iomgr/sockaddr_windows.h @@ -40,4 +40,6 @@ // must be included after the above #include <mswsock.h> +typedef SOCKET GRPC_SOCKET; + #endif /* GRPC_CORE_LIB_IOMGR_SOCKADDR_WINDOWS_H */ diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index 00fd77679a..5ed00a8e98 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -464,6 +464,11 @@ static char *tcp_get_peer(grpc_endpoint *ep) { return gpr_strdup(tcp->peer_string); } +static int *tcp_get_socket(grpc_endpoint *ep) { + grpc_tcp *tcp = (grpc_tcp *)ep; + return &tcp->fd; +} + static grpc_workqueue *tcp_get_workqueue(grpc_endpoint *ep) { grpc_tcp *tcp = (grpc_tcp *)ep; return grpc_fd_get_workqueue(tcp->em_fd); @@ -476,7 +481,8 @@ static const grpc_endpoint_vtable vtable = {tcp_read, tcp_add_to_pollset_set, tcp_shutdown, tcp_destroy, - tcp_get_peer}; + tcp_get_peer, + tcp_get_socket}; grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, size_t slice_size, const char *peer_string) { |