PracticeDev/study_clang/ipc_test/ipc_unix_socket_server.c

63 lines
1.8 KiB
C

/*************************************************************************
> File Name : ipc_unix_socket_server.c
> Author : TL Song
> EMail : songtianlun@frytea.com
> Created Time : Thu 31 Dec 2020 08:55:11 AM CST
************************************************************************/
#include <unistd.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
const char path[]="/tmp/server";
int main(){
int server_fd,client_fd;
struct sockaddr_un server_addr, client_addr;
unlink(path);
server_fd = socket(AF_UNIX,SOCK_STREAM,0);
if(server_fd == -1){
perror("socket: ");
exit(1);
}
server_addr.sun_family=AF_UNIX;
strcpy(server_addr.sun_path,path);
if(bind(server_fd,(struct sockaddr *)&server_addr,sizeof(server_addr))==-1){
perror("bind: ");
exit(1);
}
listen(server_fd,10); //server listen most 10 requests.
puts("server is listening: ");
int client_len=sizeof(client_addr);
client_fd=accept(server_fd,(struct sockaddr *)&client_addr,(int *)&client_len);
if(client_fd == -1){
perror("accept: ");
exit(1);
}
char recv[105], send[105];
int i;
while(1){
memset(recv,0,sizeof(recv));
if(read(client_fd,recv,105)==-1){
perror("read: ");
break;
}
if(strcmp(recv,"end\n")==0){
printf("the server process end.\n");
break;
}
printf("recv message from client: %s",recv);
memset(send,0,sizeof(send));
if(read(STDIN_FILENO,send,sizeof(send))==-1){
perror("read: ");
break;
}
if(write(client_fd,send,strlen(send))==-1){
perror("write: ");
break;
}
}
close(server_fd);
unlink(path);
}