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.
 
 

63 lines
1.7 KiB

#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"
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;
}