#include #include #include #include #include #include #define MY_SOCK_PATH "/tmp/socket" #define LISTEN_BACKLOG 50 int main(void) { int sfd, cfd; socklen_t peer_addr_size; struct sockaddr_un my_addr, peer_addr; sfd = socket(AF_UNIX, SOCK_STREAM, 0); if (sfd == -1) { perror("socket"); } memset(&my_addr, 0, sizeof(my_addr)); my_addr.sun_family = AF_UNIX; strncpy(my_addr.sun_path, MY_SOCK_PATH, sizeof(my_addr.sun_path) - 1); if (bind(sfd, (struct sockaddr *) &my_addr, sizeof(my_addr)) == -1) { perror("bind"); } if (listen(sfd, LISTEN_BACKLOG) == -1) { perror("listen"); } peer_addr_size = sizeof(peer_addr); /* Now we can accept incoming connections one at a time using accept(2). */ for(int i = 1; i < 4; i++) { cfd = accept(sfd, (struct sockaddr *) &peer_addr, &peer_addr_size); if (cfd == -1){ perror("accept"); } /* Code to deal with incoming connection(s)... */ write(cfd, "Hello World\n", 12); printf("Connection %d has been completed\n", i); } if (close(sfd) == -1) { perror("close"); } if (unlink(MY_SOCK_PATH) == -1) { perror("unlink"); } }