summaryrefslogtreecommitdiff
path: root/include/mysql/psi/mysql_socket.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/mysql/psi/mysql_socket.h')
-rw-r--r--include/mysql/psi/mysql_socket.h60
1 files changed, 59 insertions, 1 deletions
diff --git a/include/mysql/psi/mysql_socket.h b/include/mysql/psi/mysql_socket.h
index e32474db1dd..c78154b73db 100644
--- a/include/mysql/psi/mysql_socket.h
+++ b/include/mysql/psi/mysql_socket.h
@@ -75,6 +75,15 @@ struct st_mysql_socket
/** The real socket descriptor. */
my_socket fd;
+ /** Is this a Unix-domain socket? */
+ char is_unix_domain_socket;
+
+ /** Is this a socket opened for the extra port? */
+ char is_extra_port;
+
+ /** Address family of the socket. (See sa_family from struct sockaddr). */
+ unsigned short address_family;
+
/**
The instrumentation hook.
Note that this hook is not conditionally defined,
@@ -105,7 +114,7 @@ typedef struct st_mysql_socket MYSQL_SOCKET;
static inline MYSQL_SOCKET
mysql_socket_invalid()
{
- MYSQL_SOCKET mysql_socket= {INVALID_SOCKET, NULL};
+ MYSQL_SOCKET mysql_socket= {INVALID_SOCKET, 0, 0, 0, NULL};
return mysql_socket;
}
@@ -296,6 +305,22 @@ inline_mysql_socket_set_state(MYSQL_SOCKET socket, enum PSI_socket_state state)
#endif /* HAVE_PSI_SOCKET_INTERFACE */
/**
+ @def mysql_socket_fd(K, F)
+ Create a socket.
+ @c mysql_socket_fd is a replacement for @c socket.
+ @param K PSI_socket_key for this instrumented socket
+ @param F File descriptor
+*/
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_fd(K, F) \
+ inline_mysql_socket_fd(K, F)
+#else
+ #define mysql_socket_fd(K, F) \
+ inline_mysql_socket_fd(F)
+#endif
+
+/**
@def mysql_socket_socket(K, D, T, P)
Create a socket.
@c mysql_socket_socket is a replacement for @c socket.
@@ -569,6 +594,39 @@ static inline void inline_mysql_socket_register(
}
#endif
+/** mysql_socket_fd */
+
+static inline MYSQL_SOCKET
+inline_mysql_socket_fd
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ PSI_socket_key key,
+#endif
+ int fd)
+{
+ MYSQL_SOCKET mysql_socket= MYSQL_INVALID_SOCKET;
+ mysql_socket.fd= fd;
+
+ DBUG_ASSERT(mysql_socket.fd != INVALID_SOCKET);
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ mysql_socket.m_psi= PSI_SOCKET_CALL(init_socket)
+ (key, (const my_socket*)&mysql_socket.fd, NULL, 0);
+#endif
+ /**
+ Currently systemd socket activation is the user of this
+ function. Its API (man sd_listen_fds) says FD_CLOSE_EXEC
+ is already called. If there becomes another user, we
+ can call it again without detriment.
+
+ If needed later:
+ #if defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
+ (void) fcntl(mysql_socket.fd, F_SETFD, FD_CLOEXEC);
+ #endif
+ */
+
+ return mysql_socket;
+}
+
/** mysql_socket_socket */
static inline MYSQL_SOCKET