You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>
#define SOCKET_PATH "/tmp/unix_dgram_demo"
#define SENDER_PATH "/tmp/unix_dgram_sender"
int main() { int sock_fd; struct sockaddr_un server_addr, client_addr; char buffer[256]; // Create socket
sock_fd = socket(AF_UNIX, SOCK_DGRAM, 0); if (sock_fd == -1) { perror("socket"); exit(EXIT_FAILURE); } // Configure client address (we need to bind to send/receive)
memset(&client_addr, 0, sizeof(client_addr)); client_addr.sun_family = AF_UNIX; strncpy(client_addr.sun_path, SENDER_PATH, sizeof(client_addr.sun_path) - 1); // Remove socket file if it already exists
unlink(SENDER_PATH); // Bind to our own address (required for receiving response)
if (bind(sock_fd, (struct sockaddr *)&client_addr, sizeof(client_addr)) == -1) { perror("bind"); close(sock_fd); exit(EXIT_FAILURE); } // 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); // Send message to server
const char *message = "Hello from sender!"; if (sendto(sock_fd, message, strlen(message), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("sendto"); close(sock_fd); exit(EXIT_FAILURE); } printf("Message sent to receiver.\n"); // Receive response
socklen_t server_len = sizeof(server_addr); ssize_t num_bytes = recvfrom(sock_fd, buffer, sizeof(buffer) - 1, 0, (struct sockaddr *)&server_addr, &server_len); if (num_bytes == -1) { perror("recvfrom"); } else { buffer[num_bytes] = '\0'; printf("Received response: %s\n", buffer); } // Clean up
close(sock_fd); unlink(SENDER_PATH); return 0; }
|