#include #include #include #include #include #include #include int main(int argc, char *argv[]) { int fd = socket(AF_UNIX, SOCK_STREAM, 0); if (fd < 0) { perror("socket"); return 1; } pid_t conn_pid = fork(); if (conn_pid < 0) { perror("fork"); return 1; } else if (conn_pid == 0) { // On Linux, SO_PEERCRED is stashed on connect struct sockaddr_un addr = { .sun_family = AF_UNIX, .sun_path = "socket", }; if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("connect"); _exit(1); } execl("./client", NULL); perror("exec"); _exit(1); } sleep(1); printf("connected with PID %d\n", conn_pid); int data = 42; write(fd, &data, sizeof(data)); read(fd, &data, sizeof(data)); return 0; }