Merge "unix-domain-socket.cc: add comment explaining why bindConnectProcHelper" into main

This commit is contained in:
jade 2024-05-30 14:56:57 +00:00 committed by Gerrit Code Review
commit 53d40888ff

View file

@ -37,6 +37,17 @@ AutoCloseFD createUnixDomainSocket(const Path & path, mode_t mode)
return fdSocket; return fdSocket;
} }
/**
* Workaround for the max length of Unix socket names being between 102
* (darwin) and 108 (Linux), which is extremely short. This limitation is
* caused by historical restrictions on sizeof(struct sockaddr):
* https://unix.stackexchange.com/a/367012.
*
* Our solution here is to start a process inheriting the socket, chdir into
* the directory of the socket, then connect with just the filename. This is
* rather silly but it works around working directory being process-wide state,
* and is as clearly sound as possible.
*/
static void bindConnectProcHelper( static void bindConnectProcHelper(
std::string_view operationName, auto && operation, std::string_view operationName, auto && operation,
int fd, const std::string & path) int fd, const std::string & path)