2 #include <stdlib.h> /* atoi */
3 #include <unistd.h> /* sleep */
5 #include <string.h> /* memset */
7 #include <sys/socket.h>
8 #include <sys/un.h> /* struct sockaddr_un */
10 #define SENDER_PATH "/tmp/sender_addr"
11 #define RECEIVER_PATH "/tmp/receiver_addr"
16 int main (int argc, char **argv)
19 printf("please provide the node to execute:\n");
20 printf(" $./mprogram 0 (sender)\n");
21 printf(" $./mprogram 1 (receiver)\n");
25 switch(atoi(argv[1])) {
33 printf("wrong node number\n");
38 unlink(RECEIVER_PATH);
46 struct sockaddr_un sender_addr, receiver_addr;
51 printf("I am the sender\n");
53 sock = socket(AF_UNIX, SOCK_DGRAM, 0);
56 memset(&sender_addr, 0, sizeof(sender_addr));
57 sender_addr.sun_family = AF_UNIX;
58 strcpy(sender_addr.sun_path, SENDER_PATH);
60 err = bind(sock, (struct sockaddr *)&sender_addr, sizeof(sender_addr));
63 memset(&receiver_addr, 0, sizeof(receiver_addr));
64 receiver_addr.sun_family = AF_UNIX;
65 strcpy(receiver_addr.sun_path, RECEIVER_PATH);
69 size = snprintf(buffer, sizeof(buffer), "hello world %d", i);
70 sent_bytes = sendto(sock,
74 (struct sockaddr *) &receiver_addr,
75 sizeof(receiver_addr));
77 assert(sent_bytes >= 0);
79 printf("sender : sent %s\n", buffer);
83 printf("Sender done\n");
89 struct sockaddr_un sender_addr, receiver_addr;
91 ssize_t received_bytes;
94 printf("I am the receiver\n");
96 sock = socket(AF_UNIX, SOCK_DGRAM, 0);
99 memset(&receiver_addr, 0, sizeof(receiver_addr));
100 receiver_addr.sun_family = AF_UNIX;
101 strcpy(receiver_addr.sun_path, RECEIVER_PATH);
103 err = bind(sock, (struct sockaddr *)&receiver_addr, sizeof(receiver_addr));
106 for(i=0; i<10; i++) {
107 from_len = sizeof(sender_addr);
108 received_bytes = recvfrom(sock,
112 (struct sockaddr *)&sender_addr,
115 assert(received_bytes >= 0);
117 buffer[received_bytes] = '\0';
118 printf("receiver : received %s\n", buffer);
122 printf("receiver done\n");