Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/un.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stddef.h>
- #include <errno.h>
- #include <unistd.h>
- int notify_ready()
- {
- int fd = -1;
- struct sockaddr_un *addr = NULL;
- socklen_t addrlen;
- const char *notify_socket = getenv("NOTIFY_SOCKET");
- const char *message = "READY=1";
- ssize_t l;
- if (!notify_socket)
- return 0;
- addrlen = (socklen_t) (offsetof(struct sockaddr_un, sun_path)
- + strlen(notify_socket) + 1);
- fd = socket(AF_UNIX, SOCK_DGRAM, 0);
- if (fd < 0)
- return -errno;
- addr = (struct sockaddr_un *) calloc(1, (size_t) addrlen);
- if (!addr) {
- int r = -errno;
- close(fd);
- return r;
- }
- addr->sun_family = AF_UNIX;
- strcpy(addr->sun_path, notify_socket);
- if (addr->sun_path[0] == '@') {
- addr->sun_path[0] = '\0';
- --addrlen;
- }
- l = sendto(fd, message, (size_t) strlen(message), 0,
- (const struct sockaddr *) addr, addrlen);
- if (l < 0) {
- int r = -errno;
- close(fd);
- free(addr);
- return r;
- }
- free(addr);
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement