/* **************************
* Process IPC by datagram Socket
* the code of server
* *************************/
#include <unistd.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#define SOCKET_PATH "/tmp/SOCKET_TEST"
#define BUF_SIZE 128
int main()
{
struct sockaddr_un server_address,client_address;
int server_fd,client_fd;
int index = 0;
int res;
int addr_len;
char buf[BUF_SIZE];
// create socket
server_fd = socket(AF_UNIX,SOCK_DGRAM,0);
if(-1 == server_fd)
{
printf("create socket failed \n");
return 1;
}
//set attribute of socket
memset(&server_address,0,sizeof(struct sockaddr_un) );
server_address.sun_family = AF_UNIX;
strncpy(server_address.sun_path,SOCKET_PATH,sizeof(server_address.sun_path)-1 );
// delete the socket file ,other way, it can't be used by next time
res = remove(SOCKET_PATH);
//bind address to socket
addr_len = sizeof(struct sockaddr_un);
res = bind(server_fd,(struct sockaddr *)&server_address,addr_len);
if(-1 == res)
{
printf("bind address failed \n");
return 1;
}
//receive the data from client by socket
addr_len = 0;
res = recvfrom(server_fd,buf,BUF_SIZE,0,(struct sockaddr *)&client_address,&addr_len);
if(-1 == res)
{
printf("receive data by socket failed \n");
return 1;
}
printf("[server] receiving data (%s) from client by socket\n",buf);
// don't close socket,because client have closed it
/*
res = close(client_fd);
if(-1 == res)
{
printf("close socket failed \n");
return 1;
}
*/
return 0;
}
评论0
最新资源