#include #include #include #include #include #include #define SOCKET_PATH "/tmp/unix_dgram_demo" int main() { int sock_fd; struct sockaddr_un server_addr, client_addr; socklen_t client_len; char buffer[256]; // Create socket sock_fd = socket(AF_UNIX, SOCK_DGRAM, 0); if (sock_fd == -1) { perror("socket"); exit(EXIT_FAILURE); } // Remove socket file if it already exists unlink(SOCKET_PATH); // Configure server address memset(&server_addr, 0, sizeof(server_addr)); server_addr.sun_family = AF_UNIX; strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - 1); // Bind socket to address if (bind(sock_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("bind"); close(sock_fd); exit(EXIT_FAILURE); } printf("Receiver is waiting for messages on %s...\n", SOCKET_PATH); // Receive message client_len = sizeof(client_addr); ssize_t num_bytes = recvfrom(sock_fd, buffer, sizeof(buffer) - 1, 0, (struct sockaddr *)&client_addr, &client_len); if (num_bytes == -1) { perror("recvfrom"); } else { buffer[num_bytes] = '\0'; printf("Received message: %s\n", buffer); // Send response const char *response = "Hello from receiver!"; if (sendto(sock_fd, response, strlen(response), 0, (struct sockaddr *)&client_addr, client_len) == -1) { perror("sendto"); } } // Clean up close(sock_fd); unlink(SOCKET_PATH); return 0; }