-
Notifications
You must be signed in to change notification settings - Fork 1
/
unix_socket.c
93 lines (84 loc) · 1.94 KB
/
unix_socket.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#define SOCKET_NAME "/tmp/DemoSock"
#define SIZE 1024
#if 0
struct sockaddr_un{
sa_family_t sun_family;
char sun_path[108];
};
#endif
int main(){
int master_socket, data_socket;
struct sockaddr_un server;
int ret;
int result;
int data;
char buffer[SIZE];
char msg[] ="Hello welcome to socket world!!!";
printf("%s\n", msg);
// create a socket using socket syscall.
master_socket = socket(AF_UNIX,SOCK_STREAM,0);
if(master_socket== -1){
perror("Socket creation error\n");
exit(1);
}
memset(&server, 0, sizeof(struct sockaddr_un));
server.sun_family = AF_UNIX;
strncpy(server.sun_path,SOCKET_NAME,sizeof(server.sun_path)-1);
// bind the host and port to socket.
ret = bind(master_socket,(struct sockaddr *)&server,sizeof(struct sockaddr_un));
if(ret == -1){
perror("bind");
exit(1);
}
//listen to connection.
ret = listen(master_socket, 10);
if(ret ==-1)
{
perror("listen");
exit(1);
}
// accept the incomming connection
for(;;){
printf("waiting for incoming connection");
data_socket = accept(master_socket,NULL,NULL);
if(data_socket == -1){
perror("accept");
exit(EXIT_FAILURE);
}
result = 0;
for(;;){
memset(buffer,0, SIZE);
printf("waiting for data from client\n");
ret = read(data_socket,buffer, SIZE);
if(ret == -1){
perror("read");
exit(EXIT_FAILURE);
}
memcpy(&data, buffer, sizeof(int));
printf("Received : %d\n",data);
if(data == 0)break;
result += data;
}
memset(buffer, 0, SIZE);
sprintf(buffer,"result is %d\n",result);
printf("Result is : %s\n", buffer);
ret = write(data_socket,buffer,SIZE);
if(ret == -1){
perror("write");
exit(EXIT_FAILURE);
}
printf("write_success\n");
close(data_socket);
}
close(master_socket);
unlink(SOCKET_NAME);
exit(0);
}