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
Showing
Please register or sign in to comment