diff --git a/src/core/lib/iomgr/endpoint.c b/src/core/lib/iomgr/endpoint.c
index f901fcf962217c85576810531636b3ce90f1c500..e70b5599a132c836b06e26f893a3971efdceecf1 100644
--- a/src/core/lib/iomgr/endpoint.c
+++ b/src/core/lib/iomgr/endpoint.c
@@ -66,6 +66,8 @@ char* grpc_endpoint_get_peer(grpc_endpoint* ep) {
   return ep->vtable->get_peer(ep);
 }
 
+int grpc_endpoint_get_fd(grpc_endpoint* ep) { return ep->vtable->get_fd(ep); }
+
 grpc_workqueue* grpc_endpoint_get_workqueue(grpc_endpoint* ep) {
   return ep->vtable->get_workqueue(ep);
 }
diff --git a/src/core/lib/iomgr/endpoint.h b/src/core/lib/iomgr/endpoint.h
index 22979982e40a9ad0539b58da4e96805a10eadee9..2fa59cfc07216b5b64f9d776d9db5d22c9d09ec0 100644
--- a/src/core/lib/iomgr/endpoint.h
+++ b/src/core/lib/iomgr/endpoint.h
@@ -39,7 +39,6 @@
 #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. */
@@ -60,7 +59,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);
+  int (*get_fd)(grpc_endpoint *ep);
 };
 
 /* When data is available on the connection, calls the callback with slices.
@@ -73,9 +72,9 @@ 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);
+/* Get the file descriptor used by \a ep. Return -1 if \a ep is not using a fd.
+   */
+int grpc_endpoint_get_fd(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 a4236ffaeeb4dd2f01229f8398358511ac368700..b150de42f7004d26d43669df7132f353038d17f6 100644
--- a/src/core/lib/iomgr/sockaddr_posix.h
+++ b/src/core/lib/iomgr/sockaddr_posix.h
@@ -41,6 +41,4 @@
 #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 507fc71f63d86211f2b04af0f2da2c16a04ae9dc..971db5b32b2eb8b628c4fc13eeeab5409f0b910a 100644
--- a/src/core/lib/iomgr/sockaddr_windows.h
+++ b/src/core/lib/iomgr/sockaddr_windows.h
@@ -40,6 +40,4 @@
 // 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 5ed00a8e98154027c06b3360bc4413bc4c86698d..73e28ef5dd9aedc367958b9db8a18edb7c2182c6 100644
--- a/src/core/lib/iomgr/tcp_posix.c
+++ b/src/core/lib/iomgr/tcp_posix.c
@@ -464,9 +464,9 @@ static char *tcp_get_peer(grpc_endpoint *ep) {
   return gpr_strdup(tcp->peer_string);
 }
 
-static int *tcp_get_socket(grpc_endpoint *ep) {
+static int tcp_get_fd(grpc_endpoint *ep) {
   grpc_tcp *tcp = (grpc_tcp *)ep;
-  return &tcp->fd;
+  return tcp->fd;
 }
 
 static grpc_workqueue *tcp_get_workqueue(grpc_endpoint *ep) {
@@ -482,7 +482,7 @@ static const grpc_endpoint_vtable vtable = {tcp_read,
                                             tcp_shutdown,
                                             tcp_destroy,
                                             tcp_get_peer,
-                                            tcp_get_socket};
+                                            tcp_get_fd};
 
 grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, size_t slice_size,
                                const char *peer_string) {
diff --git a/src/core/lib/security/transport/secure_endpoint.c b/src/core/lib/security/transport/secure_endpoint.c
index 1086c3be6af4f82f3fa4b06381ff59ca6922d4d1..22dc05e9f9e01252c040281ce70825b353e1c66b 100644
--- a/src/core/lib/security/transport/secure_endpoint.c
+++ b/src/core/lib/security/transport/secure_endpoint.c
@@ -366,9 +366,7 @@ static char *endpoint_get_peer(grpc_endpoint *secure_ep) {
   return grpc_endpoint_get_peer(ep->wrapped_ep);
 }
 
-static GRPC_SOCKET *endpoint_get_socket(grpc_endpoint *secure_ep) {
-  return NULL;
-}
+static int endpoint_get_fd(grpc_endpoint *secure_ep) { return -1; }
 
 static grpc_workqueue *endpoint_get_workqueue(grpc_endpoint *secure_ep) {
   secure_endpoint *ep = (secure_endpoint *)secure_ep;
@@ -383,7 +381,7 @@ static const grpc_endpoint_vtable vtable = {endpoint_read,
                                             endpoint_shutdown,
                                             endpoint_destroy,
                                             endpoint_get_peer,
-                                            endpoint_get_socket};
+                                            endpoint_get_fd};
 
 grpc_endpoint *grpc_secure_endpoint_create(
     struct tsi_frame_protector *protector, grpc_endpoint *transport,
diff --git a/test/core/internal_api_canaries/iomgr.c b/test/core/internal_api_canaries/iomgr.c
index 3620b932859dd4f53b5a91eb080811661b9c2663..0995332933b0fcc41a68e18202a091e5b1587878 100644
--- a/test/core/internal_api_canaries/iomgr.c
+++ b/test/core/internal_api_canaries/iomgr.c
@@ -85,7 +85,7 @@ static void test_code(void) {
                                  grpc_endpoint_shutdown,
                                  grpc_endpoint_destroy,
                                  grpc_endpoint_get_peer,
-                                 grpc_endpoint_get_socket};
+                                 grpc_endpoint_get_fd};
   endpoint.vtable = &vtable;
 
   grpc_endpoint_read(&exec_ctx, &endpoint, NULL, NULL);
diff --git a/test/core/util/mock_endpoint.c b/test/core/util/mock_endpoint.c
index 15e88968e8fd92c980981f00aeae1d2bc0432415..063d4366cfdbe93d9f076bf63f90abbab4070fae 100644
--- a/test/core/util/mock_endpoint.c
+++ b/test/core/util/mock_endpoint.c
@@ -96,7 +96,7 @@ static char *me_get_peer(grpc_endpoint *ep) {
   return gpr_strdup("fake:mock_endpoint");
 }
 
-static GRPC_SOCKET *me_get_socket(grpc_endpoint *ep) { return NULL; }
+static int me_get_fd(grpc_endpoint *ep) { return -1; }
 
 static grpc_workqueue *me_get_workqueue(grpc_endpoint *ep) { return NULL; }
 
@@ -108,7 +108,7 @@ static const grpc_endpoint_vtable vtable = {me_read,
                                             me_shutdown,
                                             me_destroy,
                                             me_get_peer,
-                                            me_get_socket};
+                                            me_get_fd};
 
 grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(gpr_slice slice)) {
   grpc_mock_endpoint *m = gpr_malloc(sizeof(*m));
diff --git a/test/core/util/passthru_endpoint.c b/test/core/util/passthru_endpoint.c
index 5c7167207f99aaf262d666cd9d8c99eb7f8eb248..f40177819e6e71d6fe18dfe48d8bab4524118251 100644
--- a/test/core/util/passthru_endpoint.c
+++ b/test/core/util/passthru_endpoint.c
@@ -141,7 +141,7 @@ static char *me_get_peer(grpc_endpoint *ep) {
   return gpr_strdup("fake:mock_endpoint");
 }
 
-static GRPC_SOCKET *me_get_socket(grpc_endpoint *ep) { return NULL; }
+static int me_get_fd(grpc_endpoint *ep) { return -1; }
 
 static grpc_workqueue *me_get_workqueue(grpc_endpoint *ep) { return NULL; }
 
@@ -153,7 +153,7 @@ static const grpc_endpoint_vtable vtable = {me_read,
                                             me_shutdown,
                                             me_destroy,
                                             me_get_peer,
-                                            me_get_socket};
+                                            me_get_fd};
 
 static void half_init(half *m, passthru_endpoint *parent) {
   m->base.vtable = &vtable;