in src/glk_comm.c [72:115]
static int init_mq(struct sock_names* names) {
names->sock_name = NULL;
names->sock_fd = -1;
names->serv_sock_fd = -1;
char temp[25] = "/tmp/mlglk_XXXXXX";
if (mkdtemp(temp) == NULL) {
perror("glk_comm.c: mkdtemp()");
return -1;
}
strcat(temp, "/socket");
names->sock_name = strdup(temp);
if (!names->sock_name) {
perror("glk_comm.c: strdup()");
return -1;
}
/* sockets */
struct sockaddr_un sock_addr;
sock_addr.sun_family = AF_UNIX;
memset(sock_addr.sun_path, 0, sizeof(sock_addr.sun_path));
strncpy(sock_addr.sun_path, names->sock_name, sizeof(sock_addr.sun_path) - 1);
names->serv_sock_fd = socket(AF_UNIX, SOCK_STREAM, 0);
if (names->serv_sock_fd == -1) {
perror("glk_comm.c: Error opening socket");
return -1;
}
int status = bind(names->serv_sock_fd, (struct sockaddr*)&sock_addr, sizeof(sock_addr));
if (status == -1) {
perror("glk_comm.c: Error binding socket");
return -1;
}
status = listen(names->serv_sock_fd, 1);
if (status == -1) {
perror("glk_comm.c: Error listening socket");
return -1;
}
return 0;
}