I have a simple code, like:
sockaddr_un address; address.sun_family = AF_UNIX; strcpy(address.sun_path, path); unlink(path); int fd = socket(AF_UNIX, SOCK_STREAM, 0); bind(fd, (sockaddr*)(&address), sizeof(address)); listen(fd, 100);
I want to atomically create the Unix Domain Socket file with a specific permissions, say: 0777
. The manual doesn't say anything about socket file permissions with regard to umask
or whatever. Even, if the umask
does affect the socket file, then it's not an atomic way - in multi-threaded program.
I hope, there is a way to achieve my goal without using synchronization of umask()
calls.
Another solution is to create a directory with the desired permissions, and then create the socket inside it (example code without any regard for error checking and buffer overflows):
// Create a directory with the proper permissions mkdir(path, 0700); // Append the name of the socket strcat(path, "/socket_name"); // Create the socket normally sockaddr_un address; address.sun_family = AF_UNIX; strcpy(address.sun_path, path); int fd = socket(AF_UNIX, SOCK_STREAM, 0); bind(fd, (sockaddr*)(&address), sizeof(address)); listen(fd, 100);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With