mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-15655: Add Linux abstract socket support
The functionality of the socket system variable is extended here such that a preciding '@' indicates that the socket will be an abstract socket. Thie socket name wil be the remainder of the name after the '@'. This is consistent with the approached used by systemd in socket activation. Thanks to Sergey Vojtovich: On OS X sockaddr_un is defined as: struct sockaddr_un { u_char sun_len; u_char sun_family; char sun_path[104]; }; There is a comment in man 7 unix (on linux): " On Linux, the above offsetof() expression equates to the same value as sizeof(sa_family_t), but some other implementations include other fields before sun_path, so the offsetof() expression more portably describes the size of the address structure. " As such, use the offsetof for Linux and use the previous sizeof(UNIXaddr) for non-unix platforms as that's what worked before and they don't support abstract sockets so there's no compatibility problem.. strace -fe trace=networking mysqld --skip-networking --socket @abc ... ... [pid 10578] socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0) = 22 [pid 10578] setsockopt(22, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 [pid 10578] bind(22, {sa_family=AF_UNIX, sun_path=@"abc"}, 6) = 0 [pid 10578] listen(22, 80) = 0 ... Version: '10.3.6-MariaDB-log' socket: '@abc' port: 0 Source distribution $ lsof -p 10578 mysqld 10578 dan 22u unix 0x00000000087e688c 0t0 4787815 @abc type=STREAM
This commit is contained in:
committed by
Sergey Vojtovich
parent
eaaf004cc1
commit
08098366d2
@@ -6010,9 +6010,10 @@ void do_connect(struct st_command *command)
|
||||
{
|
||||
/*
|
||||
If the socket is specified just as a name without path
|
||||
or an abstract socket indicator ('@'), then
|
||||
append tmpdir in front
|
||||
*/
|
||||
if (*ds_sock.str != FN_LIBCHAR)
|
||||
if (*ds_sock.str != FN_LIBCHAR && *ds_sock.str != '@')
|
||||
{
|
||||
char buff[FN_REFLEN];
|
||||
fn_format(buff, ds_sock.str, TMPDIR, "", 0);
|
||||
|
Reference in New Issue
Block a user