]> rtime.felk.cvut.cz Git - frescor/frsh-forb.git/blob - src/fwp/fwp/tests/unixsocktest/unixclient_thread.c
b340dea4def7c4c00e04e36337b01df2f9f32121
[frescor/frsh-forb.git] / src / fwp / fwp / tests / unixsocktest / unixclient_thread.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 #include <pthread.h>
8
9 void* messenger(void* arg)
10 {
11         struct sockaddr_un server_addr;
12         int result;
13         char buf[20];
14         char *msg;
15         int sockfd;
16         unsigned int msglen;
17
18         msg = (char*) arg;
19         msglen = strlen(msg) + 1;
20         //printf("msg=%lu \n", sizeof(msg));
21
22         /*  Create a socket for the client.  */
23
24         sockfd = socket(AF_UNIX, SOCK_SEQPACKET, 0);
25
26         /*  Name the socket, as agreed with the server.  */
27
28         server_addr.sun_family = AF_UNIX;
29         strcpy(server_addr.sun_path, "server_socket");
30         
31         /*  Now connect our socket to the server's socket.  */
32
33         result = connect(sockfd, (struct sockaddr *)&server_addr,
34                          sizeof(server_addr));
35
36         if(result == -1) {
37                 return NULL;
38         }
39
40         /*  We can now read/write via sockfd.  */
41         while (1) {
42                 while (send(sockfd, msg, msglen, 0) == -1){
43                         if (errno == EINTR) continue;
44                         goto out_err;
45                 }
46                 
47                 while (recv(sockfd, buf, sizeof(buf),0) == -1){
48                         if (errno == EINTR) continue;
49                         goto out_err;           
50                 }       
51         
52                 printf("sent=%s received=%s", msg,buf);
53                 if (!strcmp(msg,buf)) 
54                         printf(" -- OK\n");
55                 else
56                         printf(" -- FAILED!!!\n");
57         }       
58
59         close(sockfd);
60         return NULL;
61 out_err:
62         close(sockfd);
63         return NULL;    
64 }
65
66
67
68 int main(int argc, char *argv[])
69 {
70         char msg1[20]="Thread1";
71         char msg2[20]="Thread2";
72         pthread_attr_t attr;
73         pthread_t thread;
74                 
75         pthread_attr_init(&attr);
76         pthread_create(&thread, &attr, messenger, (void*) msg1);
77         pthread_create(&thread, &attr, messenger, (void*) msg2);
78
79         while (1) { /* primitive wait but enough ;-) */
80                 sleep(100000);
81         }
82 }