]> rtime.felk.cvut.cz Git - frescor/frsh-forb.git/blob - src/fwp/fwp/tests/unixsocktest/unixserver_dgram.c
d8136fd5500f81df3f3a751e10949ee06462628c
[frescor/frsh-forb.git] / src / fwp / fwp / tests / unixsocktest / unixserver_dgram.c
1 #include <sys/types.h>
2 #include <sys/socket.h>
3 #include <stdio.h>
4 #include <sys/un.h>
5 #include <unistd.h>
6 #include <errno.h>
7
8 #define SOCKET_PATH_SERVER "server_socket"
9
10 int main()
11 {
12         int server_sockfd;
13         socklen_t addr_len;
14         struct sockaddr_un server_addr;
15         struct sockaddr_un client_addr;
16         int mlen;
17
18         char buf[100];
19
20         server_sockfd = socket(AF_UNIX, SOCK_DGRAM, 0);
21
22         unlink(SOCKET_PATH_SERVER);
23         server_addr.sun_family = AF_UNIX;
24         strcpy(server_addr.sun_path, SOCKET_PATH_SERVER);
25         
26         if (bind(server_sockfd, (struct sockaddr *)&server_addr, 
27                  sizeof(server_addr)) < 0){
28                 fprintf(stderr,"Bind ");
29                 goto out_err;
30         }
31
32         
33         while (1) {     
34                 addr_len = sizeof(client_addr); 
35                 while ((mlen = recvfrom(server_sockfd, buf, sizeof(buf), 0, 
36                                         (struct sockaddr*)&client_addr,
37                                         &addr_len)) == -1){
38                         if (errno == EINTR) continue;
39                         fprintf(stderr,"Recvfrom  ");
40                         goto out_err;           
41                 }       
42
43                 printf("Prijate z %s\n",client_addr.sun_path);          
44                 while (sendto(server_sockfd, buf, mlen, 0,
45                               (struct sockaddr*)&client_addr,
46                                addr_len) == -1){
47                         if (errno == EINTR) continue;   
48                         fprintf(stderr,"Sendto  ");
49                         goto out_err;
50                 }
51         }
52       
53         close(server_sockfd);
54         unlink(SOCKET_PATH_SERVER);
55         return 0;
56
57 out_err:
58         unlink(SOCKET_PATH_SERVER);
59         perror("-server error");
60         close(server_sockfd);
61         return -1;
62 }
63